Qt4.8.2 Qt调用dll

dll用VC6编写,导出函数int myQtAdd(int a,int b);默认C调用约定

addDll.h

int myQtAdd(int a,int b);

addDll.cpp

#include "addDll.h"

int myQtAdd(int a,int b)
{
	return a+b;
}

addDll.def

LIBRARY addDll
EXPORTS
myQtAdd

 一、动态调用

在VC中,我们通过windows API loadLibraryA(W),加载dll,并把dll地址映射到进程空间。然后获取函数地址.用后FreeLibray释放dll。

在Qt中,通过QLibrary操作dll。

main.cpp

#include <QtGui/QApplication>
#include <QDebug>
#include <QLibrary>

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

    QLibrary myDll("addDll.dll");
    if(!myDll.load())
    {
        qDebug()<<"load dll error";
    }
    else
    {
        qDebug()<<"load dll suncess";
        typedef int(*FUN)(int,int);
        FUN myAdd=(FUN)myDll.resolve("myQtAdd");
        if(myAdd)
        {
            qDebug()<<myAdd(1,2);
        }
        else
            qDebug()<<"get function address error";
    }
    //手动卸载dll
    if(myDll.isLoad())
        myDll.unload();

    return a.exec();
}


需要注意的是QLibrary的析构函数:

Destroys the QLibrary object.

Unless unload() was called explicitly, the library stays in memory until the application terminates.

除非unload()函数被显示调用,否则库会保留在内存中直到程序终止。所以还是手动卸载下好。

 

另外就是dll一定要放在debug目录下,这一点不同于VC,我之前一直放在源文件目录,结果一直显示未找到dll。

 

二、静态调用

PS:这种方法暂时还没弄好,真想吐槽一下,网上的博文简直千篇一律。有的根本是错误的。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值