我正在使用加载库函数来加载3个DLL。在Visual Studio中运行时,编译的代码工作正常:
但是当从调试文件夹运行相同的应用程序(同一个确切的文件)时,它会失败:
我用来加载DLL文件的代码在这里:
#include <Windows.h>
HMODULE dll_cmn = LoadLibrary(L"C:\\LKG5000_DLL_ver1_10\\English\\64bit\\CmnLib.dll");
HMODULE dll_drv = LoadLibrary(L"C:\\LKG5000_DLL_ver1_10\\English\\64bit\\KeyUsbDrv.dll");
HMODULE dll_if2 = LoadLibrary(L"C:\\LKG5000_DLL_ver1_10\\English\\64bit\\LKIF2.dll");
cout << "\n>> Addr dll_cmn: " << dll_cmn << endl;
cout << " Addr dll_cmn: " << dll_drv << endl;
cout << " Addr dll_cmn: " << dll_if2 << endl;
if (NULL != dll_cmn && NULL != dll_drv && NULL != dll_if2)
{
cout << "\n>> Created .dll Handles Successfully" << endl;
//do stuff
}
else
{
cout << "\n>> Failed to Create .dll Handles" << endl;
}
我很困惑,因为照片显示.exe是同一个文件夹路径中的同一个文件?
任何帮助都会非常感激!!
答案 0 :(得分:0)
如果可能,请再次清理并构建项目,然后重新运行它,使用两种方式查看结果。
我只是在我的Windows 64中使用VS 2017进行测试,我在VS setup文件夹中使用了三个默认的dll文件,它们在结果窗口中都是成功的。如果可能的话,你可以使用我的样品在你身边进行测试。至少,我们可以知道它是否与您的VS环境或dll文件本身有关。
int main()
{
HMODULE dll_cmn = LoadLibrary(L"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Enterprise\\Common7\\IDE\\ReferenceAssemblies\\v4.5\\Microsoft.ExtendedReflection.dll");
HMODULE dll_drv = LoadLibrary(L"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Enterprise\\Common7\\IDE\\ReferenceAssemblies\\v4.5\\Microsoft.ExtendedReflection.Reasoning.dll");
HMODULE dll_if2 = LoadLibrary(L"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Enterprise\\Common7\\IDE\\ReferenceAssemblies\\v4.5\\Microsoft.Pex.Framework.dll");
cout << "\n>> Addr dll_cmn: " << dll_cmn << endl;
cout << " Addr dll_cmn: " << dll_drv << endl;
cout << " Addr dll_cmn: " << dll_if2 << endl;
if (NULL != dll_cmn && NULL != dll_drv && NULL != dll_if2)
{
cout << "\n>> Created .dll Handles Successfully" << endl;
//do stuff
}
else
{
cout << "\n>> Failed to Create .dll Handles" << endl;
}
getch();
return 0;}
您可以查看有关如何使用loadlibrary函数的文档并获取错误消息:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms684175(v=vs.85).aspx
我还建议您更改dll文件夹,查看结果。或者只需使用x84平台并以管理员身份运行该过程。再次查看结果。
不确定它是否是相关的依赖dll文件,但如果任何间接链接库不可用,LoadLibrary将失败。因此,您还需要检查这些dll文件是否有任何更改。