下文所使用的环境为Visual Studio 2017
生成和使用动态库的环境为 x86 Debug版本
QT环境为:MSVC2017—32bit
Visual Studio 2017下动态链接库的创建与使用及QT调用自己创建的动态链接库
1、DLL库的创建
为工程选择路径和名称,然后点击确定
完成工程创建后打开是这个样子
点开Dll.h
和Dll.cpp
可以看到里面编译器已经为我们生成了一部分代码。自己要编写的函数就放在这个类中,或者模仿这个类也可以写自己的类
下面是自己定义了一个函数用来测试
// Dll.cpp : 定义 DLL 的导出函数。
#include "pch.h"
#include "framework.h"
#include "Dll.h"
// 这是导出变量的一个示例
DLL_API int nDll=100;
// 这是导出函数的一个示例。
DLL_API int fnDll(void)
{
return 0;
}
int CDll::ADDFUN(int a, int b)
{
return a + b;
}
// 这是已导出类的构造函数。
CDll::CDll()
{
return;
}
// 下列 ifdef 块是创建使从 DLL 导出更简单的
// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DLL_EXPORTS
// 符号编译的。在使用此 DLL 的
// 任何项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
// DLL_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
// 符号视为是被导出的。
#ifdef DLL_EXPORTS
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif
// 此类是从 dll 导出的
class DLL_API CDll {
public:
CDll(void);
int ADDFUN(int a, int b);
// TODO: 在此处添加方法。
};
extern DLL_API int nDll;
DLL_API int fnDll(void);
然后点击生成解决方案,在你项目目录下的Debug文件夹下即可生成dll和lib文件
2、DLL库的使用
新建一个控制台应用程序,用于测试生成的dll库
创建成功后将刚刚生成的DLL.dll
和DLL.lib
以及Dll.h
三个文件拷贝至现在这个工程的目录下
将DLL.dll
文件移至Debug目录下。
打开当前工程在头文件中将刚刚拷贝过来的Dll.h
添加至项目中。在主函数中包含#include "Dll.h"
并添加引入lib库#pragma comment(lib,"./DLL.lib")
。然后就可以访问lib库中的成员。
3、QT下动态库的使用
一定要确保自己当前使用开发环境和dll文件的版本一致。如本文使用的QT环境为MSVC2017-32位的,dll生成选择x86也是32位的。如果环境为MSVC2017-64位的dll也要是x64下生成的64位
①、 新建一个空的QT项目,运行一下,生成一个Debug目录。将第一节生成的DLL.lib
和Dll.h
文件拷贝至当前项目目录下。
②、将第一节生成的DLL.dll
文件拷贝至项目编译后的Debug目录下。如果为release的项目就将dll文件放在release目录下。
③、右键点击QT项目名,选择添加现有文件,将Dll.h
文件添加至工程中。
④、右键点击QT项目名,选择添加库——>选择外部库
——>点击浏览选择刚刚添加到项目中文件夹中的DLL.lib
文件——>点击下一步直至完成创建
⑤、添加完成后会在.pro文件下多出下面几行语句
⑥、在widget.cpp中包含“dll.h”头文件,就可以对动态库中的成员进行访问测试了