Qt+VS2019 创建并调用dll文件
1 背景
(1)将现有的能正常运行的qt项目转化为dll,并在其他程序调用和显示;
(2)已经在vs2019中装了qt5.12.5的插件
2 思路
分两步,先生成dll,然后再调用
3步骤
3.1 生成dll
(1)在vs中打开qt项目
如图,依次点击【扩展】——》【Qt VS Tools】——》【Open Qt Project File】,然后选择要打开的Qt项目;
(2)配置属性
a、打开项目的属性文件,在【配置属性】——》【常规】——》【配置类型】中选择【动态库(.dll)】;
b、在属性文件的【连接器】——》【输出文件】中,改为以.dll结尾的名称;
(3)添加头文件
a、添加定义宏的头文件
如图,在项目的heard files文件夹上,点击鼠标右键,添加【新建项】,在新建项内选择.h文件,并命名为XXX_global.h,在内容中添加如下代码:
点击查看代码
#pragma once
#include <QtCore/qglobal.h>
#ifndef BUILD_STATIC
# if defined(SAMP8_2_LIB)
# define SAMP8_2_EXPORT Q_DECL_EXPORT
# else
# define SAMP8_2_EXPORT Q_DECL_IMPORT
# endif
#else
# define SAMP8_2_EXPORT
#endif
如上图所示,在【属性】——》【C/C++】——》【预处理器】——》【预处理器定义】,在里面添加头文件中链接库,即添加(SAMP8_2_LIB),头文件中第4行代码定义的啥,这里就输入啥;
(b)添加函数接口头文件
添加步骤同添加XXX_global.h的方式一样,只是名字定义为XXX.h。在此文件中添加需要导出函数的声明;
点击查看代码
#pragma once
#include "samp8_2_global.h"
class SAMP8_2_EXPORT Samp8_2
{
public:
Samp8_2();
};
extern "C" SAMP8_2_EXPORT int getVersion();
extern "C" SAMP8_2_EXPORT int realmain(int argc, char* argv[]);
点击查看代码
#include "widget.h"
#include <QApplication>
#include"samp8_2.h"
int realmain(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
这就可以生成dll文件了,一般可在当前项目的的debug文件夹下查看。
3.2调用dll
(1)创建一个qt应用程序
如上图所示。添加一个Qt widgets Application。
(2)配置程序属性
【a】配置附加包含目录
如上图所示,在应用的【属性】——》【C/C++】——》【附加包含目录】中,添加生成dll项目头文件所在的目录;
【b】配置链接器附加库目录
如上图,在【属性】——》【链接器】——》【附加库目录】中,将库的.lib所在的路径添加进来;
【c】配置链接器中的附加依赖项
如上图,输入库的.lib名字;
【d】复制dll文件到应用程序的运行目录下;
可以手动复制dll到应用程序的运行文件夹下,也可以通过设置命令行进行自动复制;自动复制的设置如下:
在【属性】——》【生成事件】——》【生成后事件】——【命令行】。输入
xcopy /y /d "..\..\MathLibrary\$(IntDir)samp8_2.dll(自己的dll的路径,绝对/相对都可以)" "$(OutDir)"
3.3调用库文件中的函数
int c = realmain(argc, argv);
参考文献
【1】https://blog.csdn.net/snail2651/article/details/80902328
【2】https://docs.microsoft.com/zh-cn/cpp/build/dlls-in-visual-cpp?view=msvc-170