vc++ loadlibrary dll路径问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vc++ loadlibrary dll路径问题相关的知识,希望对你有一定的参考价值。

我代码里直接写

hDll = LoadLibrary(L"ConfModule.dll");

dll文件就放在当前项目的源文件目录下,调试成功(exe文件在debug目录,dll文件在源文件目录),然后我把exe文件和ConfModule.dll单独拷贝出来放到同一个目录下执行就找不到ConfModule.dll了。如何解决让他们就在同一个目录下可以正常执行?
误导大家了 这样是能加载到dll文件的 之前测试不成功可能是其它原因

参考技术A full path

C++ LoadLibrary 返回 Null

【中文标题】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 没有收到您认为的字符串!

【讨论】:

以上是关于vc++ loadlibrary dll路径问题的主要内容,如果未能解决你的问题,请参考以下文章

VC++ 解决dll库动态库加载失败问题(调用LoadLibrary加载失败)(附源码)

loadlibrary函数中DLL的路径怎样表示

LoadLibrary函数定位DLL顺序

可以在Windows上为loadLibrary()修改java进程中的“路径”吗?

如何解决java调dll报Unable to load library的错误

如何解决java调dll报Unable to load library的错误