在 VC++ 專案中嵌入 JVM 時,常遇到 JNI_CreateJavaVM 返回 -1 (JNI_ERR),代碼編譯正常、jvm.dll 已複製至 EXE 目錄,卻始終無法建立 JVM 實例。
jvm.dll 並非獨立 DLL,它依賴相對路徑下的整個 JRE 目錄結構(如 client/jvm.dll、核心類庫 rt.jar、本地庫等)。單獨複製 jvm.dll 至 EXE 目錄會導致運行時找不到依賴資源,進而建立 JVM 失敗。
將完整 JRE bin/client 目錄加入系統或使用者 PATH 環境變數,例如:
C:\jdk1.5.0_03\jre\bin\client
(具體路徑依安裝的 JDK 版本與目錄而定)
jvm.dll 入口點載入,隨後需解析相對路徑尋找核心類庫與本地庫。JNI_CreateJavaVM 確認返回 JNI_OK (0)。掌握此細節,即可徹底解決 VC 嵌入 JVM 的「最後一公里」難題。