我正在尝试将 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
您的LoadLibrary((LPCWSTR)"libsbnw.dll")
调用的问题在于您的构建环境将其转换为LoadLibraryW
调用,但是您尝试传递宽字符串的方式是错误的。
正如您所拥有的,您只是将const char*
指针强制转换为指针const wchar_t*
,这将不起作用(例如,它将初始"li"
字符解释为单个16 位字符)。
您需要做的是使用前缀将字符串文字指定为宽字符常量L
:
HINSTANCE hLib = LoadLibrary(L"libsbnw.dll");
或者,或者,使用TEXT()
宏(在使用UNICODE
构建环境时将归结为相同):
HINSTANCE hLib = LoadLibrary(TEXT("libsbnw.dll"));
随时要求进一步解释和/或澄清。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句