C++ 加载DLL失败

XX.exe,调用dll库,因为dll1.dll库很大,就将其拆分成一个主dll库dll1,以及一些子dll,互相都有调用,主dll在 添加子的dll中的.h后,在跑时提示加载主dll失败,如果将添加子库的.dll去掉,加载正常,主dll跟子dll库,放的位置,链接库.lib都加了,悬赏大神解决..谢谢...

调试下,首先用depandency walker看看dll是什么格式什么平台,导出函数,是否需要注册
然后用调试器调试下

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/242823
  • 你也可以参考下这篇文章:C++中获取exe和dll的路径和某后缀文件名
  • 除此之外, 这篇博客: 动态库dll、静态库中的 动态库.h 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • myDll.h文件:

    #include "myDLL_global.h"
    
    extern "C"{  
    	extern int MYDLL_EXPORT g_func();
    }
    extern int MYDLL_EXPORT g_data;
    
    class MYDLL_EXPORT MyDLL
    {
    public:
        MyDLL();
        int data;
        int func();
    };
    
    

    我们这里书写动态库到时候外部使用这个动态库时,都会#include这个头文件,目的是得到这些声明

    但我们知道的是: 动态库声明导出时的符号 和 外部使用导入时的符号,是不同的 (一个是export,一个是import)

    但他俩书写的位置,都是相同的,只是名字不同。

    为了简便开发,不管是导出时的符号,还是导入时的符号,我们统一使用一个#define MYDLL_EXPORT来表示

    只不过,在导出时 这个define为export,在导入时 这个define为import

    做法是:
    在myDLL_global.h文件里,定义这个MYDLL_EXPORT

    #if defined(MYDLL_LIBRARY)
    #  define MYDLL_EXPORT Q_DECL_EXPORT
    #else
    #  define MYDLL_EXPORT Q_DECL_IMPORT
    #endif
    

    我们知道,在动态库这个qt项目里,我们在.pro文件里,是define了MYDLL_LIBRARY

    即,动态库编译最终生成的myDLL.h中,所有的MYDLL_EXPORT ,替换成了:Q_DECL_EXPORT

    而外部使用时,编译最终生成的myDLL.h中,所有的MYDLL_EXPORT ,替换成了:Q_DECL_IMPORT

    xx_global.h这个文件,他决定了,这个MYDLL_EXPORT 到底定义成什么

    所以,不管是动态库开发 还是外部引用动态库,不仅要#inclue 动态库.h,还要#include 动态库_global.h
    否则,你的动态库.h里用到的MYDLL_EXPORT ,他根本就没有定义,他是在动态库_global.h里定义的