gpt4 book ai didi

c++ - 当前路径的 loadlibrary 失败,GetLastError() == 0

转载 作者:可可西里 更新时间:2023-11-01 09:47:14 27 4
gpt4 key购买 nike

我有一个从当前路径加载 DLL 的简单程序

#include <iostream>
#include <windows.h>

using namespace std;

auto loaddll(const char * library) {
auto dllModule = LoadLibrary(library);
if(dllModule == NULL)
throw "Can't load dll";
return dllModule;
}

int main() {
try {
auto Handle = loaddll("ISab.dll");
} catch(const char * error) {
cerr << "An Unexpected error :" << error << endl;
cerr << "Get Last Error : " << GetLastError();
}
}

加载库对当前路径中的每个 DLL 都失败,但对像 User.dll 这样的 DLL 成功

如果我运行它,输出会是这样

An Unexpected error :Can't load dll
Get Last Error : 0

如果我指定 dll 的完整路径,这也会失败

最佳答案

当 Win32 API 调用失败并设置错误代码时,您必须在调用任何其他 Win32 API 函数之前调用 GetLastError。你不那样做。

引发异常、流式传输到 cerr 等都可能调用其他 Win32 API 函数并因此重置错误代码。

您的代码必须如下所示:

auto dllModule = LoadLibrary(library);
if (dllModule == NULL)
auto err = GetLastError();

一旦您获得了错误代码,您就可以更好地理解为什么无法加载该模块。 LoadLibrary 的常见错误代码包括:

  • ERROR_MOD_NOT_FOUND 这意味着该模块或其依赖项之一无法通过 DLL 搜索找到。
  • ERROR_BAD_EXE_FORMAT 这总是意味着 32/64 位不匹配,与您加载的模块或其依赖项之一不匹配。

关于c++ - 当前路径的 loadlibrary 失败,GetLastError() == 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46156284/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com