CTK-安装插件的方式
方式1:使用ctk框架工厂,适用于调用普通的插件
ctkPluginFrameworkFactory frameworkFactory; QSharedPointer<ctkPluginFramework> framework = frameworkFactory.getFramework(); // 初始化并启动插件框架 try { framework->init(); framework->start(); qDebug() << "CTK plugin framework start..."; } catch (const ctkPluginException &e) { qDebug() << "CTK plugin framework init err: " << e.what(); return -1; } // 获取插件服务的contex ctkPluginContext* pluginContext = framework->getPluginContext(); try { // 安装插件 QSharedPointer<ctkPlugin> plugin = pluginContext->installPlugin(QUrl::fromLocalFile(pluginPath)); qDebug() << QString("Plugin[%1_%2] installed...").arg(plugin->getSymbolicName()).arg(plugin->getVersion().toString()); // 启动插件 plugin->start(ctkPlugin::START_TRANSIENT); qDebug() << "Plugin start..."; } catch (const ctkPluginException &e) { qDebug() << QString("Failed install or run plugin: ") << e.what() << e.getType(); return -2; } // 获取服务引用 ctkServiceReference reference = pluginContext->getServiceReference<AbsLogService>(); if (reference) { // 获取指定 ctkServiceReference 引用的服务对象 AbsLogService* service = qobject_cast<AbsLogService*>(pluginContext->getService(reference)); if (service != Q_NULLPTR) { // 调用服务 service->log("123"); } } else { qDebug()<<"reference is null"; }
方式2:使用ctk框架启动器,适用于需要eventadmin时
QString path = QDir::currentPath() + "/third_libs/ctk/libs"; // 在插件的搜索路径列表中添加一条路径 ctkPluginFrameworkLauncher::addSearchPath(path); ctkPluginFrameworkLauncher::start("org.commontk.eventadmin"); // 获取插件上下文 ctkPluginContext* context = ctkPluginFrameworkLauncher::getPluginContext(); // 启动插件 BlogEventHandler try { QSharedPointer<ctkPlugin> plugin = context->installPlugin(QUrl::fromLocalFile(pluginPath1)); plugin->start(ctkPlugin::START_TRANSIENT); qDebug() << "BlogEventHandler start ..."; } catch (const ctkPluginException &e) { qDebug() << "Failed to start BlogEventHandler" << e.what(); } // 启动插件 BlogManager try { QSharedPointer<ctkPlugin> plugin = context->installPlugin(QUrl::fromLocalFile(pluginPath2)); plugin->start(ctkPlugin::START_TRANSIENT); qDebug() << "BlogManager start ..."; } catch (const ctkPluginException &e) { qDebug() << "Failed to start BlogManager" << e.what(); } // 停止插件 ctkPluginFrameworkLauncher::stop();
长风破浪会有时,直挂云帆济沧海!
可通过下方链接找到博主
https://www.cnblogs.com/judes/p/10875138.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 上周热点回顾(1.20-1.26)
2019-07-03 自定义string类
2017-07-03 ubuntu+vm+ftp
2017-07-03 extern