用Qt生成dll类库及调用方法

用Qt生成dll类库及调用方法
用Qt生成dll类库及调用方法

用Qt生成dll类库及调用方法

(2010-08-16 11:01:01)

转载▼

标签:

教育

.NET2005:

空白工程新建DLL后,将DLL和LIB文件放入需要调用的“指定目录”

项目-》属性->连接器-》常规-》附加库目录->添加“指定目录”

项目-》属性->连接器-》输入-》附加依赖项->添加“LIB文件”

添加头文件到项目中,则DLL可用!

VC6.0:

使一个项目编译生成DLL库而不生成可执行文件:

删除main()方法;

将.pro项目文件中的TEMPLATE = app改为TEMPLATE = lib。

然后编译,此时生成的就是.a和.dll的文件。

在另一个项目中调用此DLL:

在项目文件中添加LIB。如添加此行:LIBS +=

"D:\workspace\MRP_Common\debug\common.dll" (common.dll既是上面生成的DLL);复制dll中类或方法的头文件到该项目中,并在要调用common.dll中类或方法的文件上面include;

make,在debug目录中生成可执行文件,然后将dll复制到debug中,运行。

例子:

########################### 生成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() {

return10;

}

};

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

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

#include

#include

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.";

AddFuncfunc = (AddFunc)lib.resolve("add");

if (func) {

qDebug() <

}

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

}

相关主题
相关文档
最新文档