插件管理框架forDelphi(一)
2023-06-13 09:13:59 时间
插件技术的出发点主要是为了使软件能够灵活地进行扩展功能,而不需要对主程序(框架程序)进行重新编译和发布。它的原理相当简单。软件的功能由框架程序和插件来决定。在框架程序和插件之间具有一个特定的接口,它们两者须通过这个接口来传递数据或控制信息,以实现软件功能。因此,只要符合该接口的程序(或其他功能实体),就称为该框架程序的插件。
插件实体一般分为两种,一种是包含逻辑的程序,比如动态库、Exe程序等;另一种则是一组配置信息。前一种方式多见于作图软件,媒体播放软件,适合实现复杂的功能;后一种方式多用于实现软件的Skin(皮肤)功能,以及其他一些不需要进行复杂运算的功能模块(有许多游戏软件的关卡也是采用此种方式实现,比如阿达软件的连连看)。
本篇给出在实现Dll插件方式框架程序的过程中,对Dll进行管理的框架程序及使用例子,作为读者进行插件程序设计的基础。具体而言,框架程序需要完成插件的装载、功能调用以及卸载三类功能。
其实每个控制面板程序,都是操作系统的插件。因为每个.cpl文件就是实现了特定接口的Dll。Windows的服务程序也是如此,它也只是在原有程序的基础上处理了特定的windows消息而已。
其实从广义上讲,每个运行在操作系统上的程序都是操作系统这个软件的“插件”。
其实在Delphi中,已经有一个插件管理的框架,那就是bpl。采用bpl组件包的方式也可以轻松实现功能的插件化扩展。只是该方式有个缺点:不支持其他开发工具(如vb、vc++)进行插件开发。
)
untDllManager单元中定义了两个基础的类:
TDll:所有Dll类的父类,提供了装载、卸载的相关操作;
TDllManager:Dll类的容器类。支持删除元素方式卸载Dll实体。
以下为类图:
插件实体一般分为两种,一种是包含逻辑的程序,比如动态库、Exe程序等;另一种则是一组配置信息。前一种方式多见于作图软件,媒体播放软件,适合实现复杂的功能;后一种方式多用于实现软件的Skin(皮肤)功能,以及其他一些不需要进行复杂运算的功能模块(有许多游戏软件的关卡也是采用此种方式实现,比如阿达软件的连连看)。
本篇给出在实现Dll插件方式框架程序的过程中,对Dll进行管理的框架程序及使用例子,作为读者进行插件程序设计的基础。具体而言,框架程序需要完成插件的装载、功能调用以及卸载三类功能。
其实每个控制面板程序,都是操作系统的插件。因为每个.cpl文件就是实现了特定接口的Dll。Windows的服务程序也是如此,它也只是在原有程序的基础上处理了特定的windows消息而已。
其实从广义上讲,每个运行在操作系统上的程序都是操作系统这个软件的“插件”。
其实在Delphi中,已经有一个插件管理的框架,那就是bpl。采用bpl组件包的方式也可以轻松实现功能的插件化扩展。只是该方式有个缺点:不支持其他开发工具(如vb、vc++)进行插件开发。
)
untDllManager单元中定义了两个基础的类:
TDll:所有Dll类的父类,提供了装载、卸载的相关操作;
TDllManager:Dll类的容器类。支持删除元素方式卸载Dll实体。
以下为类图:
相关文章
- CTK插件框架学习1-编译CTK-MINGW
- CTK插件框架学习3-第一个插件编写
- CTK插件框架学习4-创建跨平台插件工程「建议收藏」
- ctk编译linux,CTK插件框架学习5-插件间通信(Netlink实现热拔插监控)[通俗易懂]
- php runtimeexception,Laravel框架运行出错提示RuntimeException No application encryption…「建议收藏」
- Flask中ORM框架之SQLAlchemy插件入门到弃坑
- 《ArchSummit:从珍爱微服务框架看架构演进》
- Hybrid开发框架一、Weex
- 框架、组件库、UI框架、UI库
- 数据资产化框架
- 腾讯出品小程序自动化测试框架【Minium】系列(六)常见组件的处理
- 【Android 插件化】“ 插桩式 “ 插件化框架 ( 原理与实现思路 )
- 【Android 插件化】Hook 插件化框架 ( Hook 实现思路 | Hook 按钮点击事件 )
- 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程 | 静态代理 )
- 【Android 插件化】Hook 插件化框架 ( hook 插件化原理 | 插件包管理 )
- 【Android 插件化】Hook 插件化框架 ( 通过反射获取 “宿主“ 应用中的 Element[] dexElements )
- 【Android 插件化】Hook 插件化框架 ( 合并 “插件包“ 与 “宿主“ 中的 Element[] dexElements | 设置合并后的 Element[] 数组 )
- 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | 主线程创建 Activity 实例之前使用插件 Activity 类替换占位的组件 )
- 【Android 插件化】Hook 插件化框架 ( 反射工具类 | 反射常用操作整理 )
- 【Android 插件化】Hook 插件化框架 ( 加载插件包资源 )
- 为科学创新插上模型的翅膀,MindSpore 「昇思」正在探索框架的未来
- 【Android Gradle 插件】组件化中的 Gradle 构建脚本实现 ④ ( 使用路由实现组件间通信 | 引入 ARoute 框架 | Gradle 构建脚本优化问题 )
- 微软提出自动化神经网络训练剪枝框架OTO,一站式获得高性能轻量化模型
- TP框架实现Redis配置的全攻略(tp配置redis)
- Angular 框架将进入 2.0 时代
- Android向导框架(Wizard framework)的一种实现(需要源码的同学请留言)
- .net框架(framework)版本不匹配的解决方法
- CI框架中cookie的操作方法分析
- 从零开始学YII2框架(四)扩展插件yii2-kartikgii