2014-04-24 70 views
-2

我們的一位客戶遇到了我們的應用程序無法加載jvm.dll的問題。我們使用我們的軟件安裝了JRE,因此jvm.dll與我們所有其他客戶一樣適用。代碼如下:無法使用LoadLibrary加載jvm.dll

HMODULE MyApplication::GetJVMDll(char* szJavaHome) 
{ 
    HMODULE hLibrary; 
    char szPath[2048]; 

     strcpy_s(szPath,2048,szJavaHome); 
    #if defined(_WIN64) 
     strcat_s(szPath, 2048,"\\bin\\msvcrt.dll"); 
    #else 
     strcat_s(szPath, 2048,"\\bin\\msvcr71.DLL");  
    #endif 

    hLibrary = LoadLibrary (szPath); 
    if (!hLibrary) { 
      return NULL; 
    } 
    strcpy_s(szPath,2048,szJavaHome); 
    strcat_s(szPath, 2048,"\\bin\\server\\JVM.DLL"); 

    hLibrary = LoadLibrary (szPath); 
    if (hLibrary) { 
      return hLibrary; 
    } 

    printErrorMessage(GetLastError()); 

    return NULL; 
} 

正如我所說的,上面的代碼適用於除一個之外的所有客戶。 msvcrt.dll正在成功加載,但jvm.dll不是。 GetLastError()返回的錯誤是127.任何人都知道LoadLibrary爲什麼會失敗,這個客戶?

+0

當LoadLibrary()對我而言失敗時,這是因爲依賴DLL丟失。使用依賴沃克(谷歌它)來檢查。 –

回答

1

http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx

ERROR_PROC_NOT_FOUND 127(0x7F的)指定的程序無法找到 。

在這個片斷:

strcpy_s(szPath,2048,szJavaHome); 

難道是可能的szPath + szJavaHome超越了2048的限制?在這種情況下,加載庫會失敗。

其他可能性: 取決於檢索szJavaHome的方式以及該變量的含義;如果它只是%JAVA_HOME%環境變量,那麼也許檢查它是否包含尾部斜線可能會有所幫助。

最後的可能性,檢查這個jvm.dll有什麼依賴關係。可能是這些傳遞依賴之一無法加載。

相關問題