我刚刚尝试了以下代码(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/

10-11 00:43