gpt4 book ai didi

c++ - 加载 DLL 在编译 C++、Visual Studio 时不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 12:56:30 28 4
gpt4 key购买 nike

我正在使用加载库函数加载 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 是同一文件夹路径中的同一文件?

非常感谢任何帮助!!

最佳答案

如果可能,请重新清理并构建您的项目,然后重新运行它,使用两种方式查看结果。

我只是在我的 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文件是否有任何变化。

关于c++ - 加载 DLL 在编译 C++、Visual Studio 时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46361112/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com