2011年2月12日星期六

将Qt Application Project改成Qt Library Project

很久没有写一些关于Qt的东西,今天介绍一个小方法将Qt Application Project 改成Qt Library Project。
换句话来说,如果原来使用的是Qt项目,生成exe,后来想要将这个项目生成DLL,那么简单的改变方法如下(在VS2008中):

在project的设置里(没有什么特别的步骤,唯一请注意第三部):

1) 定义一个macro 对于Qt,DLL export,写一个头文件(但是也是可以直接使用Q_DECL_EXPORT,类似和Qt的DLL project自动生成头文件一样。

#ifndef MYGLOBAL_H
#define MYGLOBAL_H 

#include <QtCore/qglobal.h> 

#ifdef MYLIB_LIB
# define MY_EXPORT Q_DECL_EXPORT
#else
# define MY_EXPORT Q_DECL_IMPORT
10 #endif 
11
12 #endif // MYGLOBAL_H 

2) 将Project的Configuration Tpye改成Dynamic Library (.dll)

3) 修改Prprocessor Definitions设定:
MYLIB_LIB
QT_DLL

4) linker-->Ouput File 改成生成.dll

5) 在我们想要export的class加入上面写的头文件
和一般dll export类似,只是我们这里使用的是我们定义的export的macro

1 class MY_EXPORT MainWindow : public QMainWindow 

 

附注
如果只是简单的使用__declspec(dllexport) ,而不是使用Qt的export DLL的macro,如果使用生成的DLL会出现类似这样的错误。
error LNK2001: unresolved external symbol "public: static struct QMetaObject const XXX::staticMetaObject"
非常简单来说,Qt的object比较特殊,不能直接通过常用的__declspec(dllexport)进行export。

没有评论: