为什么 LoadLibrary 失败而 LoadLibraryA 成功加载 DLL?

威尔士语

我正在尝试将 DLL 加载到 C++ 中,但收到错误代码 126,我认为这意味着找不到 DLL。经过一番摸索后,我改变LoadLibraryLoadLibraryA,突然它起作用了。但是,我完全不知道为什么。我意识到我没有为这段代码提供可运行的 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么 LoadLibrary 在 DllImportAttribute 工作时失败?

Delphi:使用LoadLibrary加载DLL的奇怪行为

什么变成了用Java加载System.loadLibrary()的.dll的搜索路径?

为什么SAP Hana DB ADO.NET DLL加载可能失败?

将延迟的dll加载与LoadLibraryA的手动调用混合使用是否安全?

Easyhook:如何从加载了 LoadLibrary 的 DLL 中挂钩函数

LoadLibrary 在运行时加载 dll 时返回 126

为什么Qt Creator在没有.lib和LoadLibrary()的情况下可以正确链接dll?

LoadLibrary失败。错误127

为什么ping成功但nmap失败?

为什么httpJSON失败,但是httpLBS成功?

sklearn。ImportError:DLL加载失败

aspnetcore.dll加载失败

DLL加载失败python 3.7

Anaconda 问题,DLL 加载失败

使用 LoadLibraryA(path_to_dll) 加载 DLL 会将文件描述符 0、1 和 2 的继承句柄标志 (HANDLE_FLAG_INHERIT) 从 1 更改为 0

LoadLibrary:pyinstaller:format messageW失败

处理LoadLibrary失败,错误1114

如何获取通过LoadLibrary()加载的DLL的内存使用情况?

LoadLibrary vs加载二进制dll到进程中?

MIP SDK错误:LoadLibrary因以下原因而失败:[sdk_wrapper_dotnet.dll]使用c#

使用绝对路径通过 LoadLibrary() 和 GetModuleHandle() 加载系统 DLL 是否更好地防止 DLL 劫持?

无法导入Orekit-“ DLL加载失败”

Pyinstaller ImportError与scipy:DLL加载失败

python tensorflow导入dll加载失败

Python Opencv DLL加载失败-Windows 10

wxPython中的DLL加载失败错误

为什么LoadLibrary无法使用给定路径?

代码块编译成功,但gcc失败,为什么?