我正在使用jni开发Android应用程序 我使用GetStringUTFChars函数如下
jboolean iscopy;
const char* trainfile = (env)->GetStringUTFChars(jstr, &iscopy);
但我看到了另一个这样的例子
const char *inCStr = (*env)->GetStringUTFChars(env, inJNIStr, NULL);
两者都运作良好。但我找不到任何关于前语法的文档,即使是更简洁。
我在哪里可以找到文档,它们之间有什么区别吗?
答案 0 :(得分:14)
第一个例子是C ++语法,仅适用于C ++程序。第二个是C程序。
两者不同的原因是在C ++中JNIEnv是一个类,函数是env对象的成员函数,而在C中JNIEnv是指向结构的指针。由于您作为参数收到的是指向JNIEnv的指针,因此在C中您必须取消引用它才能访问结构成员,这就是您必须使用*env
代替env
的原因。
这应该包含在有关如何使用JNI的任何文本中,但您也可以通过阅读头文件中的代码来找到它。