Qt制作C++动态链接库
1.创建DLL工程文件creatMyDll
①创建C++ Library应用
②qt module处选择core才能使用qt的内容,如果选择none则不能使用。例如,要使用qDebug类应该选择core。
③添加代码如下:
此处创建了private、protected、public下各一个函数,是想在此提醒一下这些关键字的作用。
creatmydll.h文件
#ifndef CREATMYDLL_H
#define CREATMYDLL_H
#include "creatMyDll_global.h"
#include <QDebug>
class CREATMYDLL_EXPORT CreatMyDll
{
public:
CreatMyDll();
QString showStatus();
private:
int testPrivate(int,int);
protected:
int testProtected(int, int);
};
#endif // CREATMYDLL_H
creatMyDll_global.h没有改动,保持默认。
creatmydll.cpp文件如下
#include "creatmydll.h"
CreatMyDll::CreatMyDll()
{
}
QString CreatMyDll::showStatus()
{
QString str = "Dll Creat Success!";
qDebug()<<str;
return str;
}
int CreatMyDll::testPrivate(int v1, int v2)
{
return v1+v2;
}
int CreatMyDll::testProtected(int a1, int a2)
{
return a1-a2;
}
④Run代码,在影子构建的debug下将看到生成了dll、.o、.a文件,这就是我们要的动态链接库文件。
2.调用DLL文件工程callMyDll
①copy .h文件 到callMyDll工程的根目录
②在qt工程中添加两个.h文件
选择刚才那两个.h文件
③在callMyDll工程下,复制生成.a文件到callMyDll工程根目录,并为他们创建一个文件夹叫“include”
④为callMyDll添加动态链接库
选择外部库,选择.a文件,其余选项按照截图设置
⑤复制dll文件到callMyDll工程的exe所在的文件夹,如还未生成,请先构建一遍,注意,此处应该使用release构建。
⑥添加代码如下:
callmydll.h文件
#ifndef CALLMYDLL_H
#define CALLMYDLL_H
#include <QWidget>
#include "creatmydll.h"
#include "creatMyDll_global.h"
QT_BEGIN_NAMESPACE
namespace Ui { class callMyDll; }
QT_END_NAMESPACE
class callMyDll : public QWidget
{
Q_OBJECT
public:
callMyDll(QWidget *parent = nullptr);
~callMyDll();
CreatMyDll myDef;
private:
Ui::callMyDll *ui;
void Init();
};
#endif // CALLMYDLL_H
callmydll.cpp
#include "callmydll.h"
#include "ui_callmydll.h"
callMyDll::callMyDll(QWidget *parent)
: QWidget(parent)
, ui(new Ui::callMyDll)
{
ui->setupUi(this);
Init();
}
callMyDll::~callMyDll()
{
delete ui;
}
void callMyDll::Init()
{
ui->status_Edit->setText(myDef.showStatus());
// int a = ui->valueOne->text().toInt();
// int b = ui->valueTwo->text().toInt();
// int c = myDef.testPrivate(a,b);//private下的函数,仅自己能调用
// int d = myDef.testProtected(a,b);//protected下的函数仅派生类可用
// ui->add->setText(QString::number(c));
// ui->minus->setText(QString::number(d));
}
main文件
#include "callmydll.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
callMyDll w;
w.show();
return a.exec();
}
⑦运行程序,结果如图。