第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > Qt如何调用VS编写的动态链接库(dll文件)

Qt如何调用VS编写的动态链接库(dll文件)

时间:2021-10-06 15:14:09

相关推荐

Qt如何调用VS编写的动态链接库(dll文件)

在最近的开发中需要做了demo,来验证公司的老项目能否在Qt上做重新开发;于是碰到的第一个问题那就是dll文件如何加载了;网上查阅了很多资料,记录一下已成功加载dll文件的方法,以防遗忘。

下面是我在VS编译器上写的一个简单的dll文件,关于dll文件如何编写,我就不再赘述了。

.h文件

#ifndef _MYDLL_H#define _MYDLL_H#ifdef MYDLL_EXPORTS#define MYDLL_API __declspec(dllexport)#else#define MYDLL_API __declspec(dllimport)#endif extern "C" MYDLL_API int add(int a, int b);#endif

.cpp文件

#include "mydll.h"extern "C" MYDLL_API int add(int a, int b){return (a + b);}

编译成功后,会得到下面三个文件,mydll.h、MyDll.lib、MyDll.dll

然后打开Qt创建一个项目;我是把这三个文件全部拷贝到了运行工作目录;如下所示:

下面介绍一下Qt如何隐式调用dll文件:

打开.Pro文件

在工程文件中包含.h文件的路径以及库文件的路径即可,下面就是如何调用库文件中的函数了:

#include <QDebug>#include <QLibrary>#include "mydll.h" //包含头文件int main(){qDebug() << add(10, 20);return 0;}

上述是隐式调用库文件的函数,还有一种显示调用方法,如下所示:

#include <QDebug>#include <QLibrary>#include "mydll.h" //包含头文件typedef int(*pFun)(int, int);int main(){QLibrary mydll("MyDll.dll");if(!mydll.load()){qDebug() << "load dll error";}else{qDebug() << "load dll success";pFun myAdd = (pFun)mydll.resolve("add");if(myAdd){qDebug() << myAdd(1, 10);}else{qDebug() << "get Function address error";}}if(mydll.isLoaded()){mydll.unload();}return 0;}

相较而言,隐式调用比显示调用更加简洁,通常都是选择隐式调用更为合适。

当然,在配置库文件的路径时,也可以选择用相对路径的方式,如下所示:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。