我在DLL中使用QMetaObject(更具体地说是staticMetaObject属性)时遇到问题。我已经缩小到以下小例子:
TestLib.h
#pragma once
#include <QObject>
class TestClass : public QObject {
Q_OBJECT
public:
static QString testMethod() { return "TestString"; }
};
TestLib.cpp
#include "TestLib.h"
QString s1 = TestClass::testMethod();
// The line in question. If this line is commented out, the code works!
QString s2 = TestClass::staticMetaObject.className();
的main.cpp
#include <QLibrary>
#include <QDebug>
int main(int argc, char *argv[])
{
QLibrary lib("testlib.dll");
qDebug() << lib.load();
}
如果上面的行被注释掉,则lib.load()
会返回true
,否则会返回false
。
如果使用调试器运行,则会在相关行中报告地址0x0处的内存访问冲突。
这是Qt中的错误吗?可以在DLL中使用QMetaObjects,还是我做错了什么?