0
我正在開發一個調用jar來通過JNI完成大部分工作的dll。我怎樣才能創建DLL,使得它只在DLL加載時創建JVM一次,並在卸載DLL時釋放它?當DLL被加載時如何加載JVM,並且在卸載DLL時釋放它
我正在開發一個調用jar來通過JNI完成大部分工作的dll。我怎樣才能創建DLL,使得它只在DLL加載時創建JVM一次,並在卸載DLL時釋放它?當DLL被加載時如何加載JVM,並且在卸載DLL時釋放它
提供一個DllMain函數,在此之後圖案:
BOOL WINAPI DllMain(
HINSTANCE hinstDLL, // handle to DLL module
DWORD fdwReason, // reason for calling function
LPVOID lpReserved) // reserved
{
// Perform actions based on the reason for calling.
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
// Initialize once for each new process.
// Return FALSE to fail DLL load.
LOAD_JVM(); // <-----------------------------------------
break;
case DLL_THREAD_ATTACH:
// Do thread-specific initialization.
break;
case DLL_THREAD_DETACH:
// Do thread-specific cleanup.
break;
case DLL_PROCESS_DETACH:
// Perform any necessary cleanup.
UNLOAD_JVM(); // <-----------------------------------------
break;
}
// Successful DLL_PROCESS_ATTACH.
return TRUE;
}
問題是,加載一個JVM,我需要調用LoadLibrary加載的jvm.dll(我需要做這種方式)到我的地址空間這會在DllMain – shawn
@shawn中導致死鎖 - 也許你可以通過創建一個線程並從該線程加載dll而不是直接在DllMain中解決此問題。 – mah