在上一篇文章中,简单的介绍了eclipse下生成jni头文件以及java调用C语言的流程,其中,在生成的头文件方法声明中,需要传入一个JNIEnv类型的变量,这里我们就来看一下JNIEnv这个变量类型
JNIEXPORT jstring JNICALL Java_com_will_jni_JNITest_getStringFromC
(JNIEnv *, jclass);
JNIEnv 类型
我们右击JNIEnv,点击转到声明,跳转到jni.h头文件中JNIEnv的声明处。
#ifdef __cplusplus
typedef JNIEnv_ JNIEnv;
#else
typedef const struct JNINativeInterface_ *JNIEnv;
#endif
这里通过预编译指令分别针对C++和C语言环境JNIEnv作了不同的声明,上面的代码中可以看到,在C++环境中, JNIEnv是 JNIEnv_结构体的别名,而在C语言环境中,它是JNINativeInterface_结构体的指针别名,注意这里C++和C中声明的区别,一个是结构体的别名,一个是结构体指针的别名。为什么会有这种区别呢,我们在后面再说。
-
c语言中的JNIEnv
接着跳到C语言中JNINativeInterface_