LoadLibrary返回Null

时间:2011-12-22 07:17:20

标签: c++ visual-studio-2010 visual-c++ loadlibrary

我刚刚尝试了以下代码(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。根据{{​​3}},函数失败时返回NULL。我尝试使用GetLastError,错误代码为126(docs)。

如何更正此问题?

谢谢!

3 个答案:

答案 0 :(得分:12)

您有一个字符串文字,由窄字符组成。您的LoadLibrary电话显然需要广泛的字符。类型转换不是从一个转换为另一个的方式。使用L前缀来获取宽字符串文字:

LoadLibrary(L"ntdll.dll")

类型转换告诉编译器您的char const*实际上是wchar_t const*,这不是真的。无论如何,编译器信任你并将指针传递给LoadLibrary,但当被解释为宽字符串时,你传递的东西是无意义的。它不代表系统上任何文件的名称,因此API会正确报告它无法找到该模块。

答案 1 :(得分:2)

你应该使用LoadLibrary(_T("ntdll.dll")) LPCWSTR只是将基于字符串的字符串指针强制转换为宽字符串指针。

答案 2 :(得分:0)

除了必须通过使用string前缀(已在接受的答案中提到)将路径wchar_t const*转换为L之外。根据我过去的几个小时的经验:
值得一提的是,LoadLibrary函数不会自动加载预期库(DLL)的依赖项。换句话说,如果您尝试加载依赖于库Y的库X,则应该先执行LoadLibrary(Y),然后执行LoadLibrary(X),否则加载库X将会失败,并且会出现错误{{1 }}。

相关问题