1
JNIEXPORT jstring JNICALL Java_com_marakana_NativeLib_hello (JNIEnv * env, jobject obj) 
{                                         
    return (*env)->NewStringUTF(env, "Hello World!");
}  

是什么env?请不要说指针。但它指向什么?我们(*env)->NewStringUTF甚至在没有初始化的情况下使用。这怎么可能?

4

1 回答 1

3

JNIEnvVM 正在将其传递给您的函数。它本质上是一个指向函数指针数组的指针。(除此之外还有更多内容,但函数指针是有趣的部分。)

如果启用了CheckJNI,VM 会传入一个指向不同函数数组的指针,这些函数在调用基本函数之前执行扩展检查。

与 VM 关联的每个线程都有自己的JNIEnv. 始终使用传递给您的方法的那个,永远不要将其存储在全局或静态本地中。

于 2013-11-13T06:23:43.550 回答