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和文件了,这时候你可以试试能否启动。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)