(有个大哥这里已经写的很详细了,我按照他的步骤一次就成功了,这里纯做个记录)
VS2017+QT生成动态库(DLL)并完成调用
第一节、VS2019创建QTdll项目(无界面)
一、创建QT库
设定好项目名称和位置(我这里用的是默认的项目名):
“Next":
“Next":
”Finish“:
项目创建成功,可以看到这里自动生成了这些文件:
第二步:定义几个导出函数用于测试:
#include "qstring.h"
QString GetInformation();
int Add(double a, double b);
第三步:编写函数的动作:
QString QtClassLibrary1::GetInformation()
{
QString info = "hello";
return info;
}
int QtClassLibrary1::Add(double a, double b)
{
double sum = a + b;
return sum;
}
第四步:生成:点击”生成“——>”生成解决方案“(or:Ctrl + B)会看到生成了这几个文件:
第二节、VS2019调用QTdll项目(无界面)
第一步:创建新项目:
设定好项目名称和位置(我这里用的是默认的项目名):
”Next“:
”Finish“:
项目创建成功,可以看到项目底下自动生成了这个文件:
第二步:将”QtClassLibrary1.h“ 文件、“qtclasslibrary1_global.h”文件和“QtClassLibrary1.lib”文件移动到图示位置:
将“QtClassLibrary1.dll”文件移动到图示位置:
第三步:引用头文件调用DLL
#include "QtClassLibrary1.h"
#include "qtclasslibrary1_global.h"
#include "qdebug.h"
#pragma comment(lib,"QtClassLibrary1.lib")
#pragma execution_character_set("utf-8")
QtClassLibrary1 dll;
qDebug() << "信息:" << dll.GetInformation();
qDebug() << "加法" << dll.Add(24, 45);
第四步:运行
第三节、部分小知识点总结
另外,里面有几个小的知识点这里集结一下:
- 调用DLL时,main.cpp里面有这样一行代码
#pragma comment(lib,"QtClassLibrary2.lib")
虽然能大概猜出来这句代码大概是导入DLL库的意思,但是本菜鸟本着严谨的学习态度,还是百度了一下。
我找到的最容易理解的解释是:
**这是告诉编译器在编译形成的.obj文件和.exe文件中加一条信息,使得 链接器在链接库的时候要去找QtClassLibrary2.lib这个库,不要先去找别的库。
** 参考链接:添加链接描述
然后我又找了“ #pragma comment()”比较书面化的解释:
#pragma comment是一个编译器指令,指示Visual C ++在生成的目标文件中留下注释。链接器在处理对象文件时可以读取该注释。
#pragma comment(lib, libname) 告诉链接器将’libname’库添加到库依赖关系列表中,就好像您已经将它添加到项目属性中一样 Linker->Input->Additional dependencies
- 关于源代码中有中文字符无法识别问题,我注意到程序中有这样一行代码
#pragma execution_character_set("utf-8")
百度了一下,见下图:
编译器将源代码中的窄字符和窄字符串文本编码为可执行文件中 UTF-8
我在程序里测试了一下,确实少了这行代码就无法识别中文。
参考链接:#pragma execution_character_set解释