以下は、JavaJVMからJNIを介して呼び出される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 ...;
}
これはWindowsXPで機能しますが、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)クライアントVM(20.2-b06混合モードwindows-x86)、C++コードはVisualStudio2010で構築されました。