2019独角兽企业重金招聘Python工程师标准>>>

我在前面的一篇文章《反向(或者后向)插件系统设计》中介绍了一种实现插件架构的方法,但是没有给出实现的方法。本文就来讲一讲如何基于PluginRT进行插件编程。PluginRT是前面提到的插件系统设计思想的C++实现。

插件架构

在上一篇文章《模块化编程思想及(C++)实践》中,我讲到了模块化编程思想,其实插件化和模块化在本质上没有太大的区别,甚至模块化的概念外延比插件化还要更广。所以两种实践有很多的相似之处。

插件构成

  1. 名称。全局范围内表明该插件独一无二的标识。

  2. 依赖。称插件运行引用的其他插件为依赖。

  3. 接口。将插件对外提供的服务称为接口。

插件管理

  1. 加载插件配置文件,扫描插件列表,分析插件之间的依赖。

  2. 按照插件之间的依赖顺序依次加载所有插件。

  3. 所有插件加载成功后,启动所有插件。

  4. 在应用程序退出前,停止所有插件。

  5. 按照反依赖顺序卸载所有插件。

插件接口

根据插件管理的要求,每个插件都必须实现下面的四个接口函数:

extern"C" __declspec(dllexport) bool OnPluginLoad(PluginRuntime *env);
extern"C" __declspec(dllexport) bool OnPluginStart();
extern"C" __declspec(dllexport) bool OnPluginStop();
extern"C" __declspec(dllexport) bool OnPluginUnload();

其中:

  • OnPluginLoad用于插件加载阶段,在所有插件运行之前做好本插件需要做的工作,比如初始化当前插件的资源、注册当前插件提供的PluginRuntime函数、记录全局的PluginRuntime运行时等。

  • OnPluginStart用于插件启动阶段,这时候所有插件的准备工作均已就绪。

  • OnPluginStop用于插件停止阶段,在应用程序退出前停止所有插件。

  • OnPluginUnload用于插件卸载阶段,主要是资源清理等工作。

应用程序

应用程序指的是可执行程序,在Windows上通常以.exe为文件名后缀。在本文实现的插件结构内,应用程序也被当做插件的节点,因为应用程序也通常会提供一些插件服务。Application插件的实现方式和普通插件没什么区别。

插件配置

插件配置文档的基本内容包含两个部分:

  1. Application节点,该节点必须实现,是程序的入口点。

  2. Plugin节点,该节点是可选节点。注意插件之间的依赖关系。

配置文档的内容格式如下:

<?xml version="1.0" encoding="UTF-8"?>
<PluginConfig><Application Tag="CamShow"><Discription><![CDATA[程序启动模块]]></Discription><Depends><![CDATA[]]></Depends><Path Type="Relative"><![CDATA[CamShow.exe]]></Path></Application><Plugin Tag="VideoWidget"><Discription><![CDATA[视频控制插件]]></Discription><Depends><![CDATA[CamShow;]]></Depends><Path Type="Relative"><![CDATA[..\Plugin\VideoWidget\VideoWidget.dll]]></Path></Plugin><Plugin Tag="CanvasWidget"><Discription><![CDATA[绘图控制插件]]></Discription><Depends><![CDATA[CamShow;]]></Depends><Path Type="Relative"><![CDATA[..\Plugin\CanvasWidget\CanvasWidget.dll]]></Path></Plugin>
</PluginConfig>

编程实践

参见:https://pluginrt.codeplex.com/

转载于:https://my.oschina.net/lvan100/blog/326674

[软件架构]基于PluginRT的插件编程相关推荐

  1. 通达信 python插件选股_[转载]通达信插件选股(基于通达信插件编程规范的简单分析)...

    首先声明,鄙人是编程人员,不是股民.对选股概念了解甚少.本文仅作编程人员学习借鉴之用.不对选股理论进行探讨和解释. 以前有客户找我做过通达信插件选股的小任务,当时第一次接触面向接口(此类"接 ...

  2. MAYA API插件编程--入门篇

    MAYA API插件编程--入门篇 作者:华文广          日期:2010.11.28 我们知道,MAYA是一个基于结点的插件式软件架构,这种开放式的软件架构是非常优秀的,它可以让用户非常方便 ...

  3. 基于Native Client的编程框架

    上面是一个浏览器的架构图,JS引擎+渲染引擎+外壳Shell+内核 4部分构成了浏览器的主体,传统的插件(上图左部)通过NPAPI与浏览器通信,Native Client(上图右部)通过PPAPI与浏 ...

  4. lua 给userdata设置元表_UE4热更新:基于UnLua的Lua编程指南

    本片文章搬运自我自己的博客:原文链接: UE4热更新:基于UnLua的Lua编程指南 作者: ZhaLiPeng UE使用的是C++这种编译型语言,在编译之后就成了二进制,只有通过玩家重新安装才能打到 ...

  5. 【P4论文分享】基于P4的可编程数据平面研究及其应用

    前言 本文是本人学习的笔记,如有错误欢迎指正. 论文下载地址:基于P4的可编程数据平面研究及其应用 本文目录 前言 1 引 言 传统交换机的局限性 如何增强网络开放性? OpenFlow局限性 解决O ...

  6. UE4热更新:基于UnLua的Lua编程指南

    UE4热更新:基于UnLua的Lua编程指南 https://imzlp.me/posts/36659/ https://imzlp.me/posts/36659/ Z's Blog 首页 归档 分类 ...

  7. 基于vue的可视化编程

    基于vue的可视化编程 网上找了几个开源的,下载下来一一试了下 https://github.com/jaweii/Vue-Layout https://github.com/L-Chris/vue- ...

  8. 自动售货机编程_Rosmaro中基于视觉自动机的编程简介

    自动售货机编程 by Łukasz Makuch 通过ŁukaszMakuch Rosmaro中基于视觉自动机的编程简介 (An introduction to visual automata-bas ...

  9. arcgis下的python编程-基于ArcGIS的Python编程秘笈(第2版)

    基于ArcGIS的Python编程秘笈(第2版) 译者简介 审阅人简介 1 面向ArcGIS的Python语言基础 1.1 使用IDLE进行Python脚本开发 1.1.1 Python Shell窗 ...

  10. 基于MATLAB的面向对象编程(1)——类,属性,方法

    这里写目录标题 1 入门 1.1 如何把面条抽象成Class 1.2 文件类 2 基于MATLAB的面向对象编程入门 2.1 如何定义一个类(Class) 2.2 创建一个对象 2.3 类的属性 2. ...

最新文章

  1. HTML5新特性---Form表单前台通过正则表达式自动验证邮箱
  2. 洛谷1042 乒乓球 解题报告
  3. Electron中通过process进程对象的api获取CPU、系统位数、环境变量等相关信息
  4. Java 异常 总结 try catch finally Exception
  5. 如何优化WebRTC提升直播体验?
  6. 变频器说明书_图解变频器接线方法
  7. 衔接UI线程和管理后台工作线程的类(多线程、异步调用)[转]
  8. JavaScript中字符串的match与replace方法
  9. Django2.1.1与xadmin0.6.0遇到的坑
  10. 关于安装PHP补装PDO与PDO_MYSQL操作
  11. 字节流和字符流的读写
  12. 01数据结构概述(郝斌数据结构)
  13. 机器学习——LASSO算法
  14. 微信文件管理更改文件夹移动报错
  15. 拷贝控制示例——Message和Folder
  16. Linux下代理服务器(proxy)配置
  17. backtrader 自定义indicator_BackTrader回测工具(一)
  18. Google Open Images Dataset V4 百度网盘地址。
  19. 机器深度学习笔记(1)——神经网络从一张图片中识别狗的过程
  20. prometheus 监控概述

热门文章

  1. 十种可以成为知己的异性
  2. allavsoft mac版:支持从各种视频分享网站下载视频
  3. 谁有能锁屏不崩溃的录屏软件给推荐个。。。。
  4. ExtJS2.0开发与实践笔记[4]——Ext中的动画处理
  5. 【例9.3】求最长不下降序列
  6. 5G卡位未来? 万物互联的畅想还是忧伤
  7. tomcat使用spring-loaded实现应用热部署
  8. 九章算法系列(#2 Binary Search)-课堂笔记
  9. 【转】每天一个linux命令(28):tar命令
  10. 排土场、弃渣场和尾矿库的区别