无法使用LoadLibrary加载jvm.dll

时间:2014-04-24 19:54:07

标签: c++ jvm

我们的一位客户遇到了无法加载jvm.dll的应用程序的问题。我们使用我们的软件安装JRE,因此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会为这个客户失败?

1 个答案:

答案 0 :(得分: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具有哪些依赖关系。可能是这些传递依赖项之一无法加载。