将字符串从Java传递到JNI

per*_*316 22 java java-native-interface

我想将一个字符串传递给我正在写的JNI,它必须分配给一个const char*.下面提到我是如何做到的:

JNI...(...,jstring jstr...){

const char* str = env->GetStringUTFChars(jstr,0);
env->ReleaseStringUTFChars(str,jstr,0);

}
Run Code Online (Sandbox Code Playgroud)

但是如果我在分配给jstring后打印const char*str,那么与我直接在JNI和printf中分配str值相比,我看到的是不同的.

这是正确的方法吗?或者是否还有其他方法可以将字符串从java分配给JNI中的const char*?

Jig*_*shi 31

java代码

public static native double myMethod( String path);  
Run Code Online (Sandbox Code Playgroud)

C代码

JNIEXPORT jdouble JNICALL Java_your_package_structure_className_myMethod
(JNIEnv * env, jobject jobj, jstring pathObj) {
     char * path;

    path = (*env)->GetStringUTFChars( env, pathObj, NULL ) ;
Run Code Online (Sandbox Code Playgroud)

  • @VladimirIvanov这个:(*env) - >方法(env,对C来说是正确的,env->是C++做JNI的方式. (12认同)
  • 参考链接似乎被打破了 (8认同)
  • 这里有多个错误.首先,如果方法是静态的,那么不会出现jobject,而是jclass.其次,(*env)不正确,只需要env-> Get ...第三,GetStringUTFChars不会将env作为参数. (3认同)
  • @Vladimir Ivano查看文档,这是工作代码http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jnistring.html (2认同)