JNIEXPORT jstring JNICALL Java_com_marakana_NativeLib_hello (JNIEnv * env, jobject obj)
{
return (*env)->NewStringUTF(env, "Hello World!");
}
什么是env
?请不要说指针。但它指的是什么呢?即使没有初始化,我们也在使用(*env)->NewStringUTF
。怎么可能?
答案 0 :(得分:3)
JNIEnv
传递给您的函数。它本质上是一个指向函数指针数组的指针。 (还有一点比这更多,但函数指针是有趣的一点。)
如果启用了CheckJNI,则VM会传入指向不同函数数组的指针,这些函数在调用基函数之前执行扩展检查。
与VM关联的每个线程都有自己的JNIEnv
。始终使用传递给方法的方法,不要将其存储在全局或静态本地。