jjzjj

ReleaseStringUTFChars

全部标签

java - JNI 中的 JVM-Crash 调用 ReleaseStringUTFChars,仅在 Windows 7、Windows XP 上正常

以下是通过JNI从JavaJVM调用的C++代码的摘录:(JNIEnv*pJniEnv,jobject,jstringpDllName){stringdllName(pJniEnv->GetStringUTFChars(pDllName,NULL));//stuffhappensherelikeHINSTANCEloadedDll=LoadLibrary(dllName.c_str());pJniEnv->ReleaseStringUTFChars(pDllName,dllName.c_str());return...;}这在WindowsXP中有效,但在Windows7中崩溃并出现访

java - 必须在 GetStringUTFChars 之后调用 ReleaseStringUTFChars(将 char* 传递给 C 函数时)?

我对从java传递给c的对象有点困惑?应该在nativejni方法中删除它们,还是在方法返回时将它们作为垃圾回收。例如:如果我的java文件中有一个本地声明publicnativeprintString(Stringmsg);并且本地方法正在使用constchar*message=(jni_env)->GetStringUTFChars(msg,&iscopy);获取字符串的c风格字符数组。我是否应该在native方法中完成所有操作后调用(jni_env)->ReleaseStringUTFChars(msg,message);。如果是,那为什么有必要?为什么java运行时环境不代表程

java - 如果 GetStringUTFChars 返回了一个副本,你应该调用 ReleaseStringUTFChars 吗?

RobGordon的“EssentialJNI:JavaNativeInterface”一书包含以下代码示例,用于将jstring转换为C字符串:constchar*utf_string;jbooleanisCopy;utf_string=env->GetStringUTFChars(str,&isCopy);/*...usestring...*/if(isCopy==JNI_TRUE){env->ReleaseStringUTFChars(str,utf_string);}请注意,如果isCopy为真,它只会调用ReleaseStringUTFChars。但是这本书JavaNativ