dll開發環境:qt5.5.1,編譯環境 msvc2010 32bit
dll測試環境:qt5.5.1
前言,看到網上很多相關的帖子,但是有些小細節介紹的不夠詳細,所以想寫一篇入手篇,以供新手參考;相關代碼也一起上傳了
另外注意,如果增加了資源文件,需要qmake一下,否則可能會構建失敗;
1、dll庫的創建
1.1 創建dll工程
此處選擇“共享庫”,共有三種選項,共享庫,靜態庫,qt plugin(qt 插件),共享庫和靜態庫的區別可以自行百度,兩種加載方式不同,一般情況下使用共享庫較多。
選擇加載的組件,因爲有窗口界面,所以勾選qtgui,qtwidgets
1.2 爲了在其他地方使用生成的庫,qt自動生成了一個{projectName}_global.h頭文件,裏邊有一個些宏定義,爲了方便使用,通常我們會將這裏邊的內容直接拷貝到想要導出的函數或者類所在的頭文件中,這樣這個文件就可以直接刪除了
刪除dll-01_global.h,並且將其中的內容拷貝到的dll01.h中
#ifndef DLL01_GLOBAL_H
#define DLL01_GLOBAL_H
#include <QtCore/qglobal.h>
#if defined(DLL01_LIBRARY)
# define DLL01SHARED_EXPORT Q_DECL_EXPORT
#else
# define DLL01SHARED_EXPORT Q_DECL_IMPORT
#endif
#endif // DLL01_GLOBAL_H
#ifndef DLL01_H
#define DLL01_H
class DLL01SHARED_EXPORT Dll01
{
public:
Dll01();
};
#endif // DLL01_H
1.3 在導出類中增加一個函數
int Dll01::add(const int& a, const int& b)
{
return a+b;
}
1.4 增加一個界面資源
1.5 增加一個直接導出函數
class DLL01SHARED_EXPORT Dll01
{
public:
Dll01();
int add(const int& a, const int& b);
};
#endif // DLL01_H
DLL01SHARED_EXPORT void show();
#include "dll01.h"
#include "dialog.h"
Dll01::Dll01()
{
}
int Dll01::add(const int& a, const int& b)
{
return a+b;
}
void show()
{
Dialog dlg;
dlg.exec();
}
重新構建程序,因爲新增一個界面,所以構建前,必須qmake一下,否則可能會出錯,切記;
2.創建測試工程
2.1 將導出的頭文件,lib文件,dll庫,放進測試工程目錄中,頭文件在include中,dll-01.lib在lib文件中,dll在debug目錄中
.pro 文件中會自動增加以下內容
win32: LIBS += -L$$PWD/lib/ -ldll-01
INCLUDEPATH += $$PWD/include
DEPENDPATH += $$PWD/include
2.2 在main文件中增加代碼
#include "widget.h"
#include <QApplication>
#include "include/dll01.h"
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
Dll01 dll;
qDebug()<<dll.add(1,2);
show();
return a.exec();
}