6.Qt+Mingw调用MSVC生成的库文件

由于MinGW 生成的库文件通常与 MSVC 生成的库文件不兼容。这意味着你不能将 MinGW 生成的对象文件与 MSVC 生成的库文件链接,反之亦然。

如果你使用 MinGW 编译你的应用程序,你需要确保你使用的库是专门为 MinGW 编译的,或者在构建库时采用兼容的编译选项。同样,如果你使用 MSVC 编译,你需要使用与 MSVC 兼容的库文件。

我参考了好几篇博客都是只能MSVC调用MSVCMingW调用MingW,交叉调用一直报错,例如

参考:【QT】Qt Creator生成动态库(DLL)并调用_qt生成dll-CSDN博客

皇天不负有心人,经过多方尝试,总算找到一个能用Mingw编译器调用MSVC生成的dll库的方法。在此做个总结

利用vs生成MSVC库,并利用QtMingW编译器调用,可参考:Qt:编译器、MSVC、Mingw、dll调用_怎么调用 msvc编译-CSDN博客Qt创建和使用动态链接库(.dll)-c++/QT/MFC-少有人走的路 (skcircle.com)

1、创建QT的MSVC项目

1)Qt新建一个C++lib库,选择MSvc格式

  • 2)将testdynamiclib_global.h头文件中的内容拷贝到testdynamiclib.h头文件中,并添加功能代码;

//以C语言方式导出函数:

extern "C"

{

  MYDLL_EXPORT int Cadd(int a, int b);

  MYDLL_EXPORT int Csub(int a, int b);

}

Cpp代码:

3)执行qmake,并重新构建代码,后运行,弹窗忽略

4  运行完后,新建一个MingW工程test,把头文件mydll.h放在新建的mingw项目pro文件夹中,

mydll.libmydll.dll放在构建底层exe所在debug目录下,如图所示

2、利用QLibrary显式链接dll动态库

显式链接共享库(QLibrary类)

特点:显式链接调用共享库是在应用程序运行时才加载共享库文件,并调用库里的函数的。应用程序编译时无需共享库的任何文件,只需知道函数名和函数的原型即可

添加头文件:#include <QLibrary>

1)在需要调用dll程序的cpp中先添加导入dll库函数

2)新建一点击按钮函数,对函数进行调用,如下

   typedef int (*myFunadd)(int, int); // 声明函数指针类型,与DLL中导出的函数原型匹配

    myFunadd myFunCadd = (myFunadd)myLib.resolve("Cadd"); // 假设函数名为"myFunctionName",此处为Cadd,与Dll中同名

    if (!myFunCadd) {

        qDebug() << "can't find function";

        //return -1;

    }

    int result = myFunCadd(1, 2); // 调用DLL中的函数

    qDebug() << "return result:" << result;

运行结果如下:Mingw编译器调用MSVC生成的dll库成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值