########################### 生成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();
}[喝小酒的网摘]http://blog.const.net.cn/a/10954.htm
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。