########################### 生成DLL的工程: #######################
修改pro文件: TEMPLATE=lib
########################### .h文件 #######################
#ifndef DLLTEST_H
#define DLLTEST_H
#ifdef Q_WS_WIN
#define MY_EXPORT __declspec(dllexport)
#else
#define MY_EXPORT
#endif
class DllTest {
public:
DllTest();
int getAge() {
return 10;
}
};
extern "C" MY_EXPORT int add(int a, int b) {
return a + b;
}
extern "C" MY_EXPORT DllTest* getDllTest(); // 使用类
#endif // DLLTEST_H
########################### .cpp文件 #######################
#include "dlltest.h"
#include <qDebug>
DllTest::DllTest() {
qDebug() << "Shared Dll Test";
}
DllTest* getDllTest() {
return new DllTest();
}
// 如果是C++编译的函数, 要使用extern "C"来包装成C函数(导出函数, 给外部提供服务).
########################### 使用DLL的工程: #######################
pro文件中加入: LIBS += "DllTest.dll"
########################### 测试.cpp文件 #######################
#include "dlltest.h"
#include <QLibrary>
#include <qDebug>
#include <QApplication>
typedef int (*AddFunc)(int, int);
typedef DllTest* (*GetFunc)();
int main(int argc, char* argv[]) {
QApplication app(argc, argv, false);
QLibrary lib("DllTest");
if (lib.load()) {
qDebug() << "Load dll successfully.";
AddFunc func = (AddFunc)lib.resolve("add");
if (func) {
qDebug() << func(1, 3);
}
GetFunc g = (GetFunc)lib.resolve("getDllTest");
if (g) {
DllTest *t = g(); // 使用DLL中的类
qDebug() << t->getAge();
delete t;
}
} else {
qDebug() << "Load dll Failed";
}
return app.exec();
}