C++ LoadLibrary 返回 Null

Posted

技术标签:

【中文标题】C++ LoadLibrary 返回 Null【英文标题】:C++ LoadLibrary Returns Null 【发布时间】:2015-12-28 21:33:37 【问题描述】:

我正在尝试加载一个名为“MathLib.dll”的简单 DLL 进行测试。 DLL 的路径是D:\Desktop\MathLib\MathLib.dll。在此代码中,dll 始终为 null,并打印“加载失败”。

#include "stdafx.h"
#include <Windows.h>
#include <iostream>

int main()

    HINSTANCE dll = LoadLibrary(L"D:\Desktop\MathLib\MathLib.dll");
    if (dll == NULL) 
        std::cout << "Failed to load";
    
    else 
        std::cout << "Loaded!";
    
    std::cin.get();
    return 0;

我认为问题出在路径上,但我不知道我可以做些什么不同的事情。

【问题讨论】:

您需要在字符串文字D:\\Desktop\\MathLib\\MathLib.dll 中转义反斜杠,或使用原始字符串文字 在 Window 上处理路径时最好将反斜杠替换为正斜杠。这样它也会自动转义空格,字符串会更清晰。 【参考方案1】:

除了 Praetorian 的评论和 Mike 关于加倍反斜杠的回答之外,您还必须确保您加载的 dll 与您的代码兼容(即,如果您在 x64 中编译,则库必须是 x64)。

我建议你使用GetLastError()。 error code 会告诉你去哪里看。

【讨论】:

【参考方案2】:

我的直接想法......这很可能是错误的......你应该在你的字符串常量中加倍那些反斜杠,以便它们将被解释为“字面上,反斜杠, 而不是像“\n”这样的转义序列。

我的直觉是 LoadLibrary 没有收到您认为的字符串!

【讨论】:

以上是关于C++ LoadLibrary 返回 Null的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 上使用带有 LoadLibrary() 方法的库 dll

使用 loadLibrary() 在 java 中调用 c++ dll

C++ - LoadLibrary() 实际上链接到库吗?

如何使用 LoadLibrary 函数导入 dll 文件并使用 dll 文件中的函数?

调试通过 LoadLibrary() 加载到 Excel 中的 C++ DLL

Android 11 - 本机 C++ 库的 System.loadLibrary 需要 60 多秒,在 Android 10 及更低版本上运行速度非常快