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

标签: jni

添加新评论