以下是通过 JNI 从 Java JVM 调用的 C++ 代码的摘录:
(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());
错误信息是:
java.exe 中 0x77355F29 (ntdll.dll) 处的第一次机会异常:0xC0000005:访问冲突读取位置 0x002B0D52。
我会很感激任何线索。
JRE 版本:6.0_27-b07,Java VM:Java HotSpot(TM) Client VM(20.2-b06 混合模式 windows-x86),C++ 代码是使用 Visual Studio 2010 构建的。