這裏是C++代碼的摘錄是從Java的JVM通過JNI調用:JVM崩潰的JNI調用ReleaseStringUTFChars,僅適用於Windows 7,Windows XP的罰款
(JNIEnv *pJniEnv, jobject, jstring pDllName)
{
string dllName(pJniEnv->GetStringUTFChars(pDllName, NULL));
// stuff happens here like
HINSTANCE loadedDll = LoadLibrary(dllName.c_str());
pJniEnv->ReleaseStringUTFChars(pDllName, dllName.c_str());
return ...;
}
此工程在Windows XP,但崩潰在Windows 7與訪問衝突異常,在該行
pJniEnv->ReleaseStringUTFChars(pDllName, dllName.c_str());
的錯誤信息是:
在0x77355F29第一次機會異常(ntdll.dll):0xC0000005:訪問衝突讀取位置0x002B0D52。
我會很感激任何線索。
JRE版本:6.0_27-B07,Java虛擬機:Java的熱點(TM)客戶端VM(20.2-B06混合模式Windows-X86),C++代碼是用Visual Studio 2010中
謝謝,這是偉大的!我會接受你的回答,並在稍後報告,如果它已經工作(可能需要一段時間來嘗試)。 –
似乎GetStringUTFChars不會返回一個jbyte *而是一個char * ... –
@TimvanBeek這是一個沒有區別的區別。他們是一樣的東西。 – EJP