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();
}