首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LoadLibrary返回空值

LoadLibrary返回空值
EN

Stack Overflow用户
提问于 2011-12-22 15:17:20
回答 3查看 9.2K关注 0票数 3

我刚刚尝试了以下代码(windows xp sp3、vs2010),LoadLibrary似乎返回空。

代码语言:javascript
复制
#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)。

我如何纠正这个问题?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-22 15:22:08

您有一个字符串文字,它由窄字符组成。您的LoadLibrary调用显然需要宽字符。类型转换不是从一种转换到另一种的方法。使用L前缀获取宽字符串文字:

代码语言:javascript
复制
LoadLibrary(L"ntdll.dll")

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

票数 12
EN

Stack Overflow用户

发布于 2011-12-22 15:24:41

您应该使用LoadLibrary(_T("ntdll.dll")) LPCWSTR仅将基于字符的字符串指针转换为宽字符串指针。

票数 2
EN

Stack Overflow用户

发布于 2019-04-04 20:44:02

除了通过使用L前缀将路径string转换为wchar_t const*的必要性之外(这在接受的回答中已经提到)。根据我过去几个小时的经验:

值得一提的是,LoadLibrary函数不会自动加载目标库(DLL)的依赖项。换句话说,如果你试图加载依赖于Y库的X库,你应该先执行LoadLibrary(Y),然后执行LoadLibrary(X),否则加载X库将会失败,并且你会得到错误126

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8600559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档