C++ LoadLibrary 返回 Null
Posted
技术标签:
【中文标题】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 没有收到您认为的字符串!
【讨论】:
以上是关于C++ LoadLibrary 返回 Null的主要内容,如果未能解决你的问题,请参考以下文章
在 C++ 上使用带有 LoadLibrary() 方法的库 dll
使用 loadLibrary() 在 java 中调用 c++ dll
如何使用 LoadLibrary 函数导入 dll 文件并使用 dll 文件中的函数?
调试通过 LoadLibrary() 加载到 Excel 中的 C++ DLL
Android 11 - 本机 C++ 库的 System.loadLibrary 需要 60 多秒,在 Android 10 及更低版本上运行速度非常快