LoadLibrary returning Null
LoadLibrary returning Null
我刚刚尝试了以下代码(windows xp sp3, vs2010)和LoadLibrary似乎返回Null。
#include "windows.h"
#include "stdio.h"
int main() {
HMODULE hNtdll;
hNtdll = LoadLibrary(LPCWSTR("ntdll.dll"));
printf("%08xn", hNtdll);
}
我得到的输出是00000000
。根据文档,当函数失败时返回NULL。我尝试使用GetLastError
和错误代码是126(0x7e,错误模式未找到)。
如何纠正这个问题?
谢谢!
您有一个字符串字面值,它由窄字符组成。你的LoadLibrary
呼叫显然需要宽字符。类型转换不是将一种类型转换为另一种类型的方法。使用L
前缀获取宽字符串字面值:
LoadLibrary(L"ntdll.dll")
类型转换告诉编译器您的char const*
实际上是wchar_t const*
,这不是真的。编译器信任您并将指针传递给LoadLibrary
,但是当被解释为宽字符串时,您传递的东西是无意义的。它不代表系统上任何文件的名称,因此API正确地报告它找不到模块。
您应该使用LoadLibrary(_T("ntdll.dll"))
LPCWSTR只是将基于字符的字符串指针转换为宽字符串指针。
除了需要使用L
前缀将路径string
转换为wchar_t const*
之外(在接受的答案中已经提到了)。根据我最近几个小时的经验:
值得一提的是,LoadLibrary
函数不会自动加载所需库(DLL)的依赖项。换句话说,如果你尝试加载依赖于库Y的库X,你应该先执行LoadLibrary(Y)
,然后执行LoadLibrary(X)
,否则加载库X将失败,你会得到错误126
。
相关文章:
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 如何在 c++ 中'NULL'字符串
- c++使用foreach使数组为null
- 当使用通配符和null指针调用函数时,对输出的说明
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 如何在映射中返回null
- 为什么返回 NULL 不会破坏函数?
- 构造函数中的 QQuickItem 父项 null
- 检查字符串是否"null" C++
- fopen 在 gdb 中返回 NULL
- what(): basic_string::_M_construct null not valid
- 在这个函数中是有缺陷的,因为取消引用 null 是无效的,所以我想更改代码
- std::localtime returning null
- SDL_LoadBMP only returning NULL
- cvLoadImage Returning NULL
- xrces item returning NULL
- Opencv: cvCaptureFromCAM returning NULL
- SQLite returning NULL rows
- LoadLibrary returning Null
- wglGetProcAddress returning NULL