将基于QObject的类导出到DLL

时间:2013-10-08 03:43:16

标签: qt dll qobject

我正在编写一个派生自QObject的类,我想将此类导出到DLL文件中,以便其他应用程序可以使用它。但我在这里遇到了一些神秘的问题:

代码如下所示:

mydll.h:

 #ifndef MYDLL_H
 #define MYDLL_H

 #include "mydll_global.h"
 #include <QObject>
 #include <QDebug>

 class MYDLLSHARED_EXPORT MyDll : public QObject
 {
     Q_OBJECT
  public:
     explicit MyDll(QObject * parent = 0);

     void test() const;
 };

 #endif // MYDLL_H

mydll_global.h:

 #ifndef MYDLL_GLOBAL_H
 #define MYDLL_GLOBAL_H

 #include <QtCore/qglobal.h>

 #if defined(MYDLL_LIBRARY)
 #  define MYDLLSHARED_EXPORT Q_DECL_EXPORT
 #else
 #  define MYDLLSHARED_EXPORT Q_DECL_IMPORT
 #endif

 #endif // MYDLL_GLOBAL_H

mydll.cpp:

 #include "mydll.h"

 MyDll::MyDll(QObject * parent) :
     QObject(parent)
 {
 }

 void MyDll::test() const {
     qDebug() << "Hello from dll!";
 }

并且dll用于另一个应用程序。该DLL已成功编译。我使用此dll在应用程序的LIBS += "myDll.dll"文件中添加了.pro,并且已将myDll.dll复制到应用程序的工作目录中。

编译器报告:

 C4273: "MyDll::qt_static_metacall" : inconsistent dll linkage.
 C2491: "MyDll::staticMetaObject": definition of dllimport static data member not allowed

这里有什么问题?

1 个答案:

答案 0 :(得分:3)

mydll_global.h的代码检查是否已定义MYDLL_LIBRARY,但您发布的代码均未定义MYDLL_LIBRARY。这是在一个你没有在这个问题上分享的文件中声明的吗?如果没有,您需要在构建项目或PCH中添加#define MYDLL_LIBRARY