主要使用三个宏
在接口类的头文件中声明
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();
}

浙公网安备 33010602011771号