Qt如何调用dll文件

Qt如何调用dll文件,第1张

Qt提供了一个 QLibrary 类供显示调用。下面给出一个完整的例子:

testDLL.dll为自定义的dll文件,将其复制到程序的输出目录下就可以调用。

 #include <QApplication>

 #include <QLibrary>

 #include <QDebug>

 #include <QMessageBox>

 typedef int (*Fun)(int,int) //定义函数指针,以备调用

 int main(int argc,char **argv)

 {

     QApplication app(argc,argv)

     QLibrary mylib("testDLL.dll")   //声明所用到的dll文件

     int result

     if (mylib.load())              //判断是否正确加载

     {

         QMessageBox::information(NULL,"OK","DLL load is OK!")

         Fun open=(Fun)mylib.resolve("add")    //援引 add() 函数

         if (open)                  //是否成功连接上 add() 函数

         {

             QMessageBox::information(NULL,"OK","Link to Function is OK!")

             result=open(5,6)      //这里函数指针调用dll中的 add() 函数

             qDebug()<<result

         }

         else

             QMessageBox::information(NULL,"NO","Linke to Function is not OK!!!!")

     }

     else

     {

         QMessageBox::information(NULL,"NO","DLL is not loaded!")

         return 0  //加载失败则退出

     }

}

失败原因可能有以下几点:

1、DLL文件可能是.net的,如果是则需要转换一下,用类库去封装C#的dll,在函数前面加上extern “C” _declspec(dllexport) ,这样编译完成生成的.lib .dll文件就可以被Qt项目直接调用了。

2、声明的函数名称是DLL中实际的函数名,可能是函数名不同导致,打开DLL找到正确的函数名尝试一下。并且,函数的参数声明也要正确。

3、调用的DLL可能存在从属关系,利用函数查看工具查看缺少哪个库文件。

使用QT生成exe应用程序后,其中依赖很多QT中的DLL库,但是在生成exe的时候,这些DLL 并没有添加到exe目录,在很多时候,我们都自己手动去复制需要的DLL,难免不会造成少dll的情况或者在其他的电脑上用不起。今天发现在qt安装目录中发现Qt 官方开发环境里自带了一个工具:windeployqt.exe。可以自动把需要依赖的库文件都自动拷贝到exe目录中。

使用方法:

1.打开QT的命令行工具,

2:进入到你生成exe目录,你可以把生成的exe拷贝到新建的一个目录中,比如c:\text中。

使用命令:1. cd c:\text

2. windeployqt test.exe

然后你就可以看到你的目录中就有需要的dll和文件了,这时候你可以试试能否启动。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8089832.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存