我曾经有一本书《EssentialJNI》。虽然它有些过时,但今天仍然可以使用。
如果我没记错的话,在C语言中,Java构造只是指针。因此,在您的代码中,“
(*env)->”是取消引用指针,以使您可以访问基础方法。
对于C ,“ env
”实际上是一个对象-与C指针不同的实体。(由于C 实际上支持对象,因此JNI实际上可以为您的C
代码提供实际的对象进行操作。)因此“ env->
”在C 中具有不同的含义,它意味着“调用”
env“所指向的对象中包含的方法。
我相信另一个不同之处是,许多C-JNI函数要求您的参数之一是“
JNIEnv *env”。因此,在C中您可能不得不说
(*env)->foo(env,bar)。使用c ++时,
env不需要第二次引用“ ”,因此您可以说“
env->foo(bar)”
不幸的是,我眼前没有上述书,所以我无法完全确认!但是我认为,对这两件事进行调查(特别是在google或其他JNI代码中寻找它们)将使您走得更远。



