Bug in JNI RegisterNatives?

Juerg Lehni juerg@scratchdisk.com
Wed May 31 12:35:00 GMT 2006


That's what I tried.

But the way JNINativeMethod is defined in jni.h, I cannot forward  
declare it that way. Here's the relevant part from jni.h:

typedef struct
{
	...
} JNINativeMethod;

Changing this would help, but I'm not sure we can do this, as the  
file is part of classpath. But this should work:

typedef struct JNINativeMethod
{
	...
} JNINativeMethod;

Class.h does not foward declare JNIEnv. _Jv_JNIEnv is used at 4  
places, but not declared. I'm a bit puzzled. It must be declared in  
one of the includes, but where?

Jürg

Am 31.05.2006 um 14:20 schrieb Tom Tromey:

>>>>>> "Juerg" == Juerg Lehni <juerg@scratchdisk.com> writes:
>
> Juerg> I just tried to do this but was running into troubles with  
> needed
> Juerg> forward declarations in Class.h for JNIEnv and  
> JNINativeMethod, both
> Juerg> needed to declare _Jv_JNI_RegisterNatives as a friend.
>
> Juerg> The way these are defined in jni.h, it seems to not be  
> possible to
> Juerg> forward declare them in Class.h. A possible solution is to  
> include
> Juerg> jni.h there, but before I go ahead I'd like to hear your  
> opinion on
> Juerg> this.
>
> You shouldn't need to.  You can just declare them like:
>
>     struct JNIEnv;
>     struct JNINativeMethod;
>
> in Class.h.
>
> In fact, JNIEnv must already be handled this way, since it is already
> referred to in Class.h.
>
> Tom



More information about the Java mailing list