jni 使用 c++ 和 c 不同的格式
jni 如果直接把源文件从 c 改为 cpp, 那么会报错 base operand of '->' has non-pointer type 'JNIEnv {aka _JNIEnv}'和Method 'GetStringUTFChars' could not be resolved
具体的写法是有区别的。
- c 调用
const char * file_path = (*env)->GetStringUTFChars(env, path, NULL);
return (*env)->NewStringUTF(env, "Hello from JNI !");//如果是用C语言格式就用这种方式
- cpp 调用
const char * file_path = env->GetStringUTFChars(path, NULL);
return env->NewStringUTF((char *)"Hello from JNI !");//C++用这种格式
原因是 jni 的头文件定义
-
c
const char* (*GetStringUTFChars)(JNIEnv*, jstring, jboolean*);
- cpp
const char* GetStringUTFChars(jstring string, jboolean* isCopy) { return functions->GetStringUTFChars(this, string, isCopy); }
参考
https://blog.csdn.net/hejia729371286/article/details/51356983