在实现JNI本地函数,调用JN函数时,C与C++的调用方式略有不同,以GetStaticFieldID()为例,说一下两种语言调用方式的不同。
jfield GetStaticFieldID(JNIEnv * env, jclass clazz, const char * name, const char * signature);
在C++代码中,调用GetStaticFieldID函数时,只需要传入除第一个参数env之外的另外三个参数即可。
fid = env->GetStaticFieldID(clazz,"staticIntField","I");
而在C语言中调用GetStaticFieldID()函数时,第一个参数env仍然要传入,并且前面env要变成(* env)。
fid =(* env)->GetStaticFieldID(env,clazz,"staticIntField","I");
这些差异在GetStaticFieldID()等JNI函数中普遍存在。在实现本地代码时要根据所用的语言的不同,选用恰当的方式,调用JNI函数。
本人新人,有错请指正!谢谢!