从DLL使用QMetaObject会导致内存访问错误

时间:2014-03-05 11:24:21

标签: visual-c++ dll qt5 qobject moc

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

0 个答案:

没有答案