4

我正在编写一个派生自 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

这里有什么问题?

4

1 回答 1

3

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

于 2013-10-08T15:13:33.283 回答