我们的一位客户遇到了无法加载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会为这个客户失败?
答案 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
具有哪些依赖关系。可能是这些传递依赖项之一无法加载。