blu*_*gon 2 c++ windows dll winapi
我有一个简单的程序,从当前路径加载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();
}
}
Run Code Online (Sandbox Code Playgroud)
加载库对于当前路径中的每个DLL都会失败,但对于像User.dll这样的DLL会成功
如果我运行它输出将是
An Unexpected error :Can't load dll
Get Last Error : 0
Run Code Online (Sandbox Code Playgroud)
如果我指定dll的完整路径,这也会失败
当Win32 API调用失败并设置错误代码时,您必须GetLastError在调用任何其他Win32 API函数之前调用.你不这样做.
引发异常,流式传输cerr等都可能会调用其他Win32 API函数,因此重置错误代码.
您的代码必须如下所示:
auto dllModule = LoadLibrary(library);
if (dllModule == NULL)
auto err = GetLastError();
Run Code Online (Sandbox Code Playgroud)
一旦得到错误代码,您应该更好地理解无法加载模块的原因.常见错误代码LoadLibrary包括:
ERROR_MOD_NOT_FOUND 这意味着DLL搜索无法找到模块或其中一个依赖项.ERROR_BAD_EXE_FORMAT 这总是意味着32/64位不匹配,无论是加载模块还是其中一个依赖项.| 归档时间: |
|
| 查看次数: |
1957 次 |
| 最近记录: |