我刚刚尝试了以下代码(windows xp sp3、vs2010),LoadLibrary似乎返回空。
#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)。
我如何纠正这个问题?
谢谢!
发布于 2011-12-22 15:22:08
您有一个字符串文字,它由窄字符组成。您的LoadLibrary调用显然需要宽字符。类型转换不是从一种转换到另一种的方法。使用L前缀获取宽字符串文字:
LoadLibrary(L"ntdll.dll")类型转换告诉编译器您的char const*实际上是一个wchar_t const*,但事实并非如此。编译器信任您,并将指针传递给LoadLibrary,但是当解释为宽字符串时,您传递的东西是无意义的。它不表示系统上任何文件的名称,因此API正确地报告它找不到该模块。
发布于 2011-12-22 15:24:41
您应该使用LoadLibrary(_T("ntdll.dll")) LPCWSTR仅将基于字符的字符串指针转换为宽字符串指针。
发布于 2019-04-04 20:44:02
除了通过使用L前缀将路径string转换为wchar_t const*的必要性之外(这在接受的回答中已经提到)。根据我过去几个小时的经验:
值得一提的是,LoadLibrary函数不会自动加载目标库(DLL)的依赖项。换句话说,如果你试图加载依赖于Y库的X库,你应该先执行LoadLibrary(Y),然后执行LoadLibrary(X),否则加载X库将会失败,并且你会得到错误126。
https://stackoverflow.com/questions/8600559
复制相似问题