1

我在 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 中使用还是我做错了什么?

4

0 回答 0