CTK Plugin Framework 介绍「建议收藏」

CTK Plugin Framework 介绍「建议收藏」CTKPluginFramework基本原理1 CTKPluginFramework是什么        CTKPluginFramework技术是面向C++的动态模型系统。该系统允许插件之间的松散耦合,并且提供了设计良好的方式来进行功能和数据的交互。此外,它没有预先对插件施加限制,这样就可以很…

大家好,又见面了,我是你们的朋友全栈君。



CTK Plugin Framework 基本原理

1 CTK Plugin Framework是什么

        CTK Plugin Framework 技术是面向 C++ 的动态模型系统。该系统允许插件之间的松散耦合,并且提供了设计良好的方式来进行功能和数据的交互。此外,它没有预先对插件施加限制,这样就可以很容易地将插件的相关部分嵌入到现有的工具包中。
简单的说来CTK Plugin Framework就是一个框架,用于管理DLL插件,同时也提供DLL插件之间的通讯服务。

2 体系架构

在这里插入图片描述
插件层(Plugins):应用插件,符合规定接口的DLL插件。
服务层(Services Layer):通过为 C++ 对象提供一个 publish-find-bind 模型,以动态方式连接插件,其实就是提供了一个订阅发布的机制,实现插件间的通讯。
生命周期层(Life Cycle Layer):实现插件的安装、启动、停止、更新和卸载。
安全层(Security Layer):负责整个框架的安全机制(暂未实现)。

2.1 Plugins插件

在这里插入图片描述
Plugins插件一般有三部分组成:
目标文件:DLL形式的动态可库。
资源文件:DLL库中使用到的资源文件和相关配置文件。
元数据:CTK Plugin Framework中特有的,DLL要应用其中必须要有。用于描述DLL库的文件。

2.2 Service Layer层

     提供了一套发布—订阅机制。一个服务简单应用步骤如下:
1、 插件创建一个服务对象
2、 使用上下文对其进行注册。
3、 注册之后可以随时更改这个服务的属性(内容)。
4、 其他插件可以通过上下文获取这个服务。
注意:
具体API在此先不介绍,后面会有介绍。
服务对象生命周期由创建的插件负责,伴随插件。

2.3 Life Cycle Layer层

生命周期层主要用于控制 Plugin 的安装、启动、停止、更新和卸载。
生命周期层的 API 主要由三个核心部分组成:ctkPluginActivator、ctkPluginContext 和ctkPlugin。

  • ctkPluginActivator:提供一组接口,主要是插件的启动、停止接口,需要由插件继承并且实现。
  • ctkPluginContext:一个plugin 在框架内的执行上下文,插件于框架的交互全靠它。
  • ps:上下文:每一段程序都有很多外部变量。只有像Add这种简单的函数才是没有外部变量的。一旦你的一段程序有了外部变量,这段程序就不完整,不能独立运行。你为了使他们运行,就要给所有的外部变量一个一个写一些值进去。这些值的集合就叫上下文。在实际的世界中,目标不可能单独的存在,它一定会于周围其他的对象会这是环境有或多或少的关系,这就是通常所说的上下文信息
  • ctkPlugin:对象是定义一个已安装插件的生命周期的访问点,在插件环境中安装的每个插件都必须有一个相关的 ctkPlugin
    对象。此外,插件必须有一个唯一的标识,在插件的生命周期中,这个标识不能改变(即使是在插件更新时),卸载和重新安装插件必须创建一个新的唯一标识。

插件的状态图
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135371.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C++ list容器的splice方法

    C++ list容器的splice方法list容器底层实现是一个带头结点的双向链表,由于链表的每个节点是单独开辟的,所以链表在移动数据,或者两个链表之间移动数据的时候,直接把节点摘下来,接入到新的位置就可以了,效率比较高。splice方法就是将list的元素进行拼接,原理就是改变结点指针的指向,效率比较高。先看看这splice方法的三种声明:(1)voidsplice(iteratorposition,list&lt…

    2022年9月24日
    5
  • <Javascript>浅谈js“三元表达式” (三元运算符)

    <Javascript>浅谈js“三元表达式” (三元运算符)前言各位大神,大家好,相约周三。我们又见面了。众所周知,三元表达式在代码量上比if…else语句更简洁一些。但是博主刘少在可读性上更加偏向于if…else语句。三元表达式不仅在js中使用,在很多后台程序语言,比如java、php中都有使用,不过在js中对于三元表达式的要求貌似要松很多。废话不多说。下面一起看看三元表达式。三元表达式素质N连问首先为什么叫三元表达式?顾…

    2022年7月15日
    14
  • JLink的JTag和SWD模式引脚定义[通俗易懂]

    JLink的JTag和SWD模式引脚定义[通俗易懂]1、SWD模式第15脚可接可不接(有问题再接)2、SWD模式第1脚VCC由目标板提供参考电压,若目标板MCU电压与SWD第2脚电压相同,则可以将1脚与2脚短接,实现3线式SWD…

    2022年5月28日
    47
  • JS实现倒计时代码实例「建议收藏」

    varcount=60*15;varcountdown=setInterval(CountDown,1000);functionCountDown(){if(count>=0){varminutes=Math.floor(count/60);varseconds=Math.floor(count…

    2022年4月13日
    46
  • nginx跨域访问配置_cors跨域访问不了

    nginx跨域访问配置_cors跨域访问不了跨域概念简单来说:两个url只要协议、域名、端口有任何一个不同,都被当作是不同的域,相互访问就会有跨域问题。案例例如:在开发前后端完全分离的系统中,服务端代码属于一个工程,前端代码属于另一个工程,前端开发人员在进行接口对接时,可能会在webstorm等工具进行编码,并用webstorm的内置服务器进行调试,这就会有跨域问题,因为,webstorm内置服务器默认前缀部分是http://localhost:63342/,而服务端接口的路径前缀部分一定不会是这样,这样便产生了跨域访问的问题。案例代码

    2022年10月1日
    1
  • 从零开始学_JavaScript_系列(27)——dojo的文档相关模块

    从零开始学_JavaScript_系列(27)——dojo的文档相关模块先上图:dojo/dom模块:dojo/dom参数:dom方法:①dom.byId(id,doc);用于通过id来选择某个dom结点;②dom.isDescendant(node,ancestor);确认某个node是否是另外一个结点的子节点;③dom.setSelectable(node,se

    2025年8月30日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号