我在 DLL 中使用 QMetaObject(更具体地说是 staticMetaObject 属性)时遇到问题。我已经缩小到以下小例子:
测试库.h
#pragma once
#include <QObject>
class TestClass : public QObject {
Q_OBJECT
public:
static QString testMethod() { return "TestString"; }
};
测试库.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();
主文件
#include <QLibrary>
#include <QDebug>
int main(int argc, char *argv[])
{
QLibrary lib("testlib.dll");
qDebug() << lib.load();
}
如果上面的行被注释掉,则lib.load()
返回true
,否则false
。如果使用调试器运行,则会在相关行中报告地址 0x0 处的内存访问冲突。
这是Qt中的错误吗?QMetaObjects 不能在 DLL 中使用还是我做错了什么?