【发布时间】:2020-01-23 17:54:22
【问题描述】:
我正在尝试将 DLL 加载到 C++ 中,但收到错误代码 126,我认为这意味着找不到 DLL。经过一番摸索,我将LoadLibrary 更改为LoadLibraryA,突然它起作用了。但是,我完全不知道为什么。我意识到我没有提供使该代码可运行的 dll,但如果有人可以解释为什么会发生这种情况,那就太好了?还有一个例子说明如何让LoadLibary 工作。
破解版
#include <stdio.h>
#include <windows.h>
typedef char* (*gf_getCurrentLibraryVersion) ();
int main() {
gf_getCurrentLibraryVersion getVersion;
HINSTANCE hLib = LoadLibrary((LPCWSTR)"libsbnw.dll");
if (hLib) {
getVersion = (gf_getCurrentLibraryVersion)GetProcAddress(hLib, "gf_getCurrentLibraryVersion");
printf("Version = %s\n", getVersion());
}
else {
printf("Error loading dll: %d/n", GetLastError());
}
printf("Hit any key to continue\n");
getchar();
return 0;
}
编译并输出
Error loading dll: 126/nHit any key to continue
到控制台
工作版
#include <stdio.h>
#include <windows.h>
typedef char* (*gf_getCurrentLibraryVersion) ();
int main() {
gf_getCurrentLibraryVersion getVersion;
HINSTANCE hLib = LoadLibraryA("libsbnw.dll");
if (hLib) {
getVersion = (gf_getCurrentLibraryVersion)GetProcAddress(hLib, "gf_getCurrentLibraryVersion");
printf("Version = %s\n", getVersion());
}
else {
printf("Error loading dll: %d/n", GetLastError());
}
printf("Hit any key to continue\n");
getchar();
return 0;
}
编译和输出
version is: 1.3.4
【问题讨论】:
-
您使用什么编译器和标志?你是在定义
_UNICODE等吗? -
当你对编译器撒谎时会发生这种情况
标签: c++ winapi dll loadlibrary