环境:windows10+Qt5
预备知识:
- 隐式调用:同时有库文件(.lib),头文件(.h)与动态链接库(.dll)。(更加简便推荐使用)
- 显式调用:没有导入库文件(.lib),只有头文件(.h)与动态链接库(.dll)。
一、隐式调用
(1)打开工程.pro文件,在.pro文件中右键,选择“添加库”。
(2)根据需要选择对应选项,此处选择外部库。
(3)添加库文件,请注意根据库文件选择对应选项,若路径中无相关文件会导致报错。
(4)自动生成的添加代码
(5)在使用前添加库文件的头文件,然后即可调用库中的API函数
二、显式调用
显式调用参考https://www.cnblogs.com/hicjiajia/archive/2010/08/27/1810239.html,采用Qt提供的QLibrary 类。下面为参考中的例子:
#include <QLibrary>
#include <QDebug>
#include <QMessageBox>
#include "dll.h" //引入头文件
typedef int (*Fun)(int,int); //定义函数指针,以备调用
int main(int argc,char **argv)
{
QApplication app(argc,argv);
QLibrary mylib("myDLL.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; //加载失败则退出
}
myDLL.dll为自定义的dll文件,将其复制到程序的输出目录下即可调用。
参考
https://blog.csdn.net/zhang1988pan/article/details/70240010
https://www.cnblogs.com/hicjiajia/archive/2010/08/27/1810239.html
https://www.cnblogs.com/sankye/p/5951852.html