vc++ loadlibrary dll路径问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vc++ loadlibrary dll路径问题相关的知识,希望对你有一定的参考价值。
我代码里直接写
hDll = LoadLibrary(L"ConfModule.dll");
dll文件就放在当前项目的源文件目录下,调试成功(exe文件在debug目录,dll文件在源文件目录),然后我把exe文件和ConfModule.dll单独拷贝出来放到同一个目录下执行就找不到ConfModule.dll了。如何解决让他们就在同一个目录下可以正常执行?
误导大家了 这样是能加载到dll文件的 之前测试不成功可能是其它原因
C++ LoadLibrary 返回 Null
【中文标题】C++ LoadLibrary 返回 Null【英文标题】:C++ LoadLibrary Returns Null 【发布时间】:2015-12-28 21:33:37 【问题描述】:我正在尝试加载一个名为“MathLib.dll”的简单 DLL 进行测试。 DLL 的路径是D:\Desktop\MathLib\MathLib.dll
。在此代码中,dll 始终为 null,并打印“加载失败”。
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
int main()
HINSTANCE dll = LoadLibrary(L"D:\Desktop\MathLib\MathLib.dll");
if (dll == NULL)
std::cout << "Failed to load";
else
std::cout << "Loaded!";
std::cin.get();
return 0;
我认为问题出在路径上,但我不知道我可以做些什么不同的事情。
【问题讨论】:
您需要在字符串文字D:\\Desktop\\MathLib\\MathLib.dll
中转义反斜杠,或使用原始字符串文字
在 Window 上处理路径时最好将反斜杠替换为正斜杠。这样它也会自动转义空格,字符串会更清晰。
【参考方案1】:
除了 Praetorian 的评论和 Mike 关于加倍反斜杠的回答之外,您还必须确保您加载的 dll 与您的代码兼容(即,如果您在 x64 中编译,则库必须是 x64)。
我建议你使用GetLastError()
。 error code 会告诉你去哪里看。
【讨论】:
【参考方案2】:我的直接想法......这很可能是错误的......你应该在你的字符串常量中加倍那些反斜杠,以便它们将被解释为“字面上,反斜杠, 而不是像“\n”这样的转义序列。
我的直觉是 LoadLibrary 没有收到您认为的字符串!
【讨论】:
以上是关于vc++ loadlibrary dll路径问题的主要内容,如果未能解决你的问题,请参考以下文章
VC++ 解决dll库动态库加载失败问题(调用LoadLibrary加载失败)(附源码)
可以在Windows上为loadLibrary()修改java进程中的“路径”吗?