QT MinGW 怎样调用 VS的DLL库

Qt 库用的是MinGW版本,g++编译器生成,与VC++编译器不是同个体系。所以工程不可以使用testdll.h头文件和testdll.lib引入库文件。
使用了在pro文件添加的方式 失败!
修改.lib为.a的方式 失败
添加静态库 也失败。在绝望时刻 发现了这个方法!!!太好了
对于调用DLL的方法,Qt本身就有相应的类来实现。

#include "dialog.h"
#include 
#include 
**typedef int (*func_Add)(int a, int b); //定义函数指针**(一定要与要调用的库里面的参数类型及返回类型一致)
typedef int (*func_Sub)(int a, int b);
typedef int (*func_Mul)(int a, int b);

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QLibrary mylib("testdll.dll");//testdll.dll的存放路径与.exe一致
    if (mylib.load())
    {
        **//"?Add@Ctestdll@@QAEHHH@Z"等字符串其实就是动态库函数int Add(int a, int b)的变体,请使用微软工具DEPENDS.EXE查看得到**(最重要的一步 从?开始的所有内容都要复制)
        func_Add f1 = (func_Add)mylib.resolve("?Add@Ctestdll@@QAEHHH@Z");
        func_Sub f2 = (func_Sub)mylib.resolve("?Sub@Ctestdll@@QAEHHH@Z");
        func_Mul f3 = (func_Mul)mylib.resolve("?Mul@Ctestdll@@QAEHHH@Z");
        int rt = 0;

        if (f1 != NULL)
        {
            rt = f1(10, 12);
        }

        if (f2 != NULL)
        {
            rt = f2(10, 12);
        }

        if (f3 != NULL)
        {
            rt = f3(10, 12);
        }
    }`在这里插入代码片`
(完美运行!!!)
    Dialog w;
    w.show();
    return a.exec();
}

致谢:
原博主 http://blog.csdn.net/libaineu2004/article/details/40152253
DEPENDS.EXE 使用方法 https://blog.csdn.net/scythe666/article/details/47165533

你可能感兴趣的:(QT学习,qt,dll)