我刚刚尝试了以下代码(windows xp sp3,vs2010)并且 LoadLibrary 似乎返回 Null。
#include "windows.h"
#include "stdio.h"
int main() {
HMODULE hNtdll;
hNtdll = LoadLibrary(LPCWSTR("ntdll.dll"));
printf("%08x\n", hNtdll);
}
我得到的输出是
00000000
。根据 docs ,函数失败时返回 NULL。我尝试使用 GetLastError
并且错误代码是 126( 0x7e, Error Mod Not Found )。我该如何解决这个问题?
谢谢!
最佳答案
您有一个字符串文字,它由窄字符组成。您的 LoadLibrary
调用显然需要宽字符。类型转换不是从一种转换到另一种的方法。使用 L
前缀获取宽字符串文字:
LoadLibrary(L"ntdll.dll")
类型转换告诉编译器您的
char const*
确实是 wchar_t const*
,这不是真的。编译器信任你并且无论如何都会将指针传递给 LoadLibrary
,但是当解释为宽字符串时,你传递的东西是无意义的。它不代表您系统上任何文件的名称,因此 API 会正确报告它找不到该模块。关于c++ - LoadLibrary 返回 Null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8600559/