java - 如何在加载 DLL 时加载 JVM 并在卸载 DLL 时释放它

标签 java windows dll jvm java-native-interface

我正在开发一个 dll,它调用一个 jar 通过 JNI 完成大部分工作。如何创建 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;
}

关于java - 如何在加载 DLL 时加载 JVM 并在卸载 DLL 时释放它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8193717/

相关文章:

c++ - 延迟加载 DLL 和关联的 .lib 文件

arrays - 设置多维数组批处理

c - 处理 WSARecv 的立即返回

windows - Windows 10 上的默认邮件应用程序是使用 HTML5、CSS 和 javascript 完成的吗?

c++ - 在 Eclipse 中的 C++ 中链接 .lib 并在 Windows 中使用 .dll

C# GetProcAddress 返回零

java - 删除 Swing JDialog 中的 "X"按钮

Java - SQLite 连接(未找到适用于 JDBC :sqlite:main. db 的驱动程序)

java - 如何将对象上的字段设置为 Final 以避免线程在同一对象上看到空引用?

java - 高级 Eclipse Java 搜索