Как загрузить JVM при загрузке DLL и освободить ее при выгрузке DLL - PullRequest
0 голосов
/ 19 ноября 2011

Я разрабатываю dll, которая вызывает jar для выполнения большей части работы через JNI. Как я могу создать DLL так, чтобы она создавала JVM только один раз, когда DLL загружается, и освобождает ее, когда DLL выгружается?

1 Ответ

1 голос
/ 19 ноября 2011

Предоставляет функцию 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;
}
...