loadLibrary失败,GetLastError()== 0的当前path

我有一个简单的程序从当前path加载一个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(); } } 

加载库在当前path中的每个DLL都失败,但像User.dll一样成功执行DLL

如果我跑它输出将像

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

这也失败,如果我指定完整的path到DLL

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

引发异常, cerr等都可能调用其他Win32 API函数,因此重置错误代码。

您的代码必须如下所示:

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

一旦你有错误代码,你应该更好地了解为什么模块不能被加载。 LoadLibrary常见错误代码包括:

  • ERROR_MOD_NOT_FOUND ,这意味着DLL搜索无法找到该模块或其某个依赖关系。
  • ERROR_BAD_EXE_FORMAT总是意味着32/64位不匹配,无论是加载的模块还是其依赖项之一。