11

我正在使用 jni 开发 Android 应用程序。
我使用 GetStringUTFChars 函数如下

jboolean iscopy;
const char* trainfile = (env)->GetStringUTFChars(jstr, &iscopy);

但是我看到了另一个这样的例子

const char *inCStr = (*env)->GetStringUTFChars(env, inJNIStr, NULL);

两者都运作良好。但即使更简洁,我也找不到任何关于前语法的文档。

我在哪里可以找到文档,它们之间有什么区别吗?

4

1 回答 1

16

第一个示例是 C++ 语法,仅适用于 C++ 程序。第二个是针对 C 程序的。

两者不同的原因是,在 C++ 中 JNIEnv 是一个类,函数是 env 对象的成员函数,而在 C 中 JNIEnv 是一个指向结构的指针。由于您收到的参数是指向 JNIEnv 的指针,因此在 C 中您必须取消引用它才能访问结构成员,这就是您必须使用*env.env

这应该包含在任何关于如何使用 JNI 的文本中,但您也可以通过阅读头文件中的代码来找到它。

于 2013-09-24T05:50:59.217 回答