AdlerChen  

主要使用三个宏
在接口类的头文件中声明
Q_DECLARE_INTERFACE(接口类名,IID标识符)
在实例类中声明
Q_PLUGIN_METADATA (被实例化的IID,配置元数据文件)
Q_INTERFACES(接口类)

Q_DECLARE_INTERFACE(ABSINTERFACE,"xxx.xxx.xxx/xxx")
Q_PLUGIN_METADATA (IID "xxx.xxx.xxx/xxx" FILE "xxx.json")
Q_INTERFACES(ABSINTERFACE)

在DLL调用方中则使用QPluginLoader

使用QPluginLoader加载dll和获取类实例的部分代码
QDir dir(qApp->applicationDirPath());
QPluginLoader* loader = new QPluginLoader;
loader->setFileName(dir.filePath("Plugin.dll"));
if(!loader->load())
{
	qDebug() << loader->errrorString();
	return;
}
PluginInterface* plugin = qobject_cast<PluginInterface*>(loader->instance());
if(plugin)
{
	//获取到最终想得到的对象
	QWidget* w = p->getWidget();
}
posted on 2024-07-16 10:47  时间想自由  阅读(27)  评论(0)    收藏  举报