在编译的c ++,Visual Studio中加载DLL不起作用

时间:2017-09-22 09:17:11

标签: c++ visual-studio debugging dll dllimport

我正在使用加载库函数来加载3个DLL。在Visual Studio中运行时,编译的代码工作正常:

Picture From VS Picture From VS

但是当从调试文件夹运行相同的应用程序(同一个确切的文件)时,它会失败:

Picture From Debug Folder Picture From Debug Folder

我用来加载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是同一个文件夹路径中的同一个文件?

任何帮助都会非常感激!!

1 个答案:

答案 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文件是否有任何更改。