我正在编写一个派生自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
这里有什么问题?
答案 0 :(得分:3)
mydll_global.h
的代码检查是否已定义MYDLL_LIBRARY
,但您发布的代码均未定义MYDLL_LIBRARY
。这是在一个你没有在这个问题上分享的文件中声明的吗?如果没有,您需要在构建项目或PCH中添加#define MYDLL_LIBRARY
。