本文主要是介绍使用 QMetaObject 和 QMetaMethod,从Dll库中导出类,Dll库类继承QOject,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Dll库代码:
- .h
#ifndef DLLDEMO_H
#define DLLDEMO_H
#include <QObject>
#include "DllDemo_global.h"extern "C" DLLDEMO_EXPORT void *CreatInst(char *strpart);class DLLDEMO_EXPORT DllDemo : public QObject
{Q_OBJECT
public:DllDemo();
public slots:QString getString();private:QString m_str = "123";
};#endif // DLLDEMO_H
- .cpp
#include "dlldemo.h"extern "C" void *CreatInst(char *strpart)
{Q_UNUSED(strpart)return new DllDemo();
}DllDemo::DllDemo()
{
}QString DllDemo::getString()
{return m_str;
}
看了网上很多种导出类库的方式,隐式调用,显示调用,虚函数表等等方式均不能正常调用,原因可能正常C++方式导出的虚函数表与库中函数无法正确匹配造成,最络使用GPT给了思路,使用。
核心代码如下:
// 使用 QMetaObject 和 QMetaMethod 调用 getString 方法const QMetaObject *metaObject = dllDemo->metaObject();int methodIndex = metaObject->indexOfMethod("getString()");if (methodIndex != -1) {QMetaMethod method = metaObject->method(methodIndex);QString result;method.invoke(dllDemo, Q_RETURN_ARG(QString, result));qDebug() << "Result:" << result;} else {qDebug() << "Failed to find getString method.";}
完整代码:https://download.csdn.net/download/wml00876/89349931
这篇关于使用 QMetaObject 和 QMetaMethod,从Dll库中导出类,Dll库类继承QOject的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!