Qt隐式/显式调用DLL

下面是我对Qt隐式/显式调用DLL一点理解,我参考的相关网址会在下面罗列出来:


①显示调用

这里我觉得http://www.cnblogs.com/newstart/archive/2013/01/23/2873611.html的例子挺好的,使用Qt创建了一个加法函数和查询页面并封装成DLL以供Qt调用。

头文件里申明DLL共享接口:

#include "MyTestDll_global.h"
#include "qdialog.h"

extern "C++" Q_DECL_EXPORT int add(int a,int b);
extern "C++" Q_DECL_EXPORT QDialog *showDialog();

源文件里添加DLL共享接口:

int add(int a,int b)
{
  return a+b;
}
QDialog *showDialog()
{
    MyShowTest *ss=new MyShowTest();
    return ss;
}

生成后将DLL置于需要调用该DLL的工程的输出目录中, 调用DLL程序部分如下:

   QLibrary mylib("MyTestDll.dll");   //声明所用到的dll文件
   int result;
   QString sresult;
   if (mylib.load())              //判断是否正确加载
   {
       Fun open=(Fun)mylib.resolve("add");    //援引 add() 函数
       if (open)                  //是否成功连接上 add() 函数
       {
            int s1=this->ui->lineEdit->text().toInt();
            int s2=this->ui->lineEdit_2->text().toInt();
            result=open(s1,s2);      //这里函数指针调用dll中的 add() 函数
            sresult=QString::number(result);
            this->ui->lineEdit_3->setText(sresult);
       }
   }
   else
   {
       QMessageBox::information(NULL,"NO","DLL is not loaded!");
   }

注意须添加qlibrary.h 。

http://blog.csdn.net/derryzhang/article/details/4653708这里用VS搭配Qt写了一个DLL文件,然后Qt调用该DLL。其特别之处在于,用VS搭配Qt写DLL时用到了模块定义文件。


②隐式调用

参考http://www.cnblogs.com/hicjiajia/archive/2010/08/27/1810239.html

LIBS+= -LD:/qt/MyTest_2 -lMyTestDll
注: 1、-L 参数指定 .lib/.a 文件的位置
        2、-l  参数指定导入库文件名(不要加扩展名)
        3、另外,导入库文件的路径中,反斜杠用的是向右倾斜的
        4、Qt要隐式调用DLL的话,须把dll文件放在程序的输出目录中,lib所存放的文件路径随便,但是须由上述.pro文件中的LIBS指定语句指定其所在文件夹,.h文件放在程序当前目录下即可。

调用DLL程序部分如下:

extern "C++"
{
#include "mytestdll.h"
}
int main(int argc ,char **argv)
{
    QApplication app(argc,argv);
    qDebug()<<add(5,6);    // dll 中的一个加法函数
    QDialog *d=showDialog();
    d->show();
    return app.exec();  //完成使命后,直接退出,不让它进入事件循环
}

总的说一句:

显式调用:需要在程序里使用语句将DLL导入,打开共享库,使用后再关闭。

隐式调用:不需要使用语句导入,直接调用即可。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值