插件管理框架 for Delphi(一)_Delphi

插件技术的出发点主要是为了使软件能够灵活地进行扩展功能,而不需要对主程序(框架程序)进行重新编译和发布。它的原理相当简单。软件的功能由框架程序和插件来决定。在框架程序和插件之间具有一个特定的接口,它们两者须通过这个接口来传递数据或控制信息,以实现软件功能。因此,只要符合该接口的程序(或其他功能实体),就称为该框架程序的插件。
插件实体一般分为两种,一种是包含逻辑的程序,比如动态库、Exe程序等;另一种则是一组配置信息。前一种方式多见于作图软件,媒体播放软件,适合实现复杂的功能;后一种方式多用于实现软件的Skin(皮肤)功能,以及其他一些不需要进行复杂运算的功能模块(有许多游戏软件的关卡也是采用此种方式实现,比如阿达软件的连连看)。
本篇给出在实现Dll插件方式框架程序的过程中,对Dll进行管理的框架程序及使用例子,作为读者进行插件程序设计的基础。具体而言,框架程序需要完成插件的装载、功能调用以及卸载三类功能。
其实每个控制面板程序,都是操作系统的插件。因为每个.cpl文件就是实现了特定接口的Dll。Windows的服务程序也是如此,它也只是在原有程序的基础上处理了特定的windows消息而已。
其实从广义上讲,每个运行在操作系统上的程序都是操作系统这个软件的“插件”。
其实在Delphi中,已经有一个插件管理的框架,那就是bpl。采用bpl组件包的方式也可以轻松实现功能的插件化扩展。只是该方式有个缺点:不支持其他开发工具(如vb、vc++)进行插件开发。

untDllManager单元中定义了两个基础的类:
TDll:所有Dll类的父类,提供了装载、卸载的相关操作;
TDllManager:Dll类的容器类。支持删除元素方式卸载Dll实体。
以下为类图:

时间: 2024-11-05 21:57:40

插件管理框架 for Delphi(一)_Delphi的相关文章

插件管理框架 for Delphi(二)_Delphi

unit untDllManager; interface uses   Windows, Classes, SysUtils, Forms; type   EDllError = Class(Exception);   TDllClass = Class of TDll;   TDll = Class;   TDllEvent = procedure(Sender: TObject; ADll: TDll) of Object;   { TDllManager     o 提供对 Dll 的管

初探Delphi中的插件编程_Delphi

插件结构的编程需要一个插件容器来控制各DLL的运行情况,将划分好的每个子系统安排到一个DLL库文件中.对每个DLL程序需要为容器预留接口函数,一般接口函数包括:启动调用DLL库的函数.关闭DLL库的函数.通过接口函数,插件容器可以向DLL模块传递参数实现动态控制.具体实现细节我将在下文说明并给出响应代码. 您可能需要先了解一下DELPHI中UNIT的结构,工程的结构.本文没有深入讨论DLL编程的理论细节,只是演示了一些实用的代码,我当时学习的是刘艺老师的<DELPHI深入编程>一书. 我也处于

初探Delphi中的插件编程

前言 我写Delphi程序是从MIS系统入门的,开始尝试子系统划分的时候采用的是MDI窗体的结构.随着系统功能的扩充,不断有新的子系统加入系统中,单个工程会变得非常大,每次做一点修改都要重新编译,单个工程的形式也不利于团队协作.为了提高工作效率,我希望利用DLL动态链接库的形式实现插件结构的编程. 插件结构的编程需要一个插件容器来控制各DLL的运行情况,将划分好的每个子系统安排到一个DLL库文件中.对每个DLL程序需要为容器预留接口函数,一般接口函数包括:启动调用DLL库的函数.关闭DLL库的函

包合并-delphi 插件(主程+dll) 怎么确定要带哪些包编译?如何将这些包进行合并?

问题描述 delphi 插件(主程+dll) 怎么确定要带哪些包编译?如何将这些包进行合并? delphi 插件(主程+dll) 带包编译 使用了第三方控件后怎么确定要带哪些包编译?有没有什么方法查看?如何将这些包进行合并? 我的意思是将所有用到包都进行带包编译,因为使用的插件环境如果有重复包注册就会报错. 为了发布的简化,最后需要将这些包合并到一起? 各位做DELPHI插件时,对于这些包是怎么处理的? 解决方案 Delphi内有一个函数GetPackageInfo,可以获得包内部的所有信息,包

delphi插件-Gexperts使用

GExperts应用指南 GExperts是一组通过扩展集成开发环境(IDE)来提高Delphi和C++ Builer程序员工作效率的工具,详细的算的话,至少有二,三十项对Delphi的IDE功能的补充.GExperts以开放源码形式开发,以自由软件形式来发布.  作者鼓励用户下载源代码研究和提交Bug报告.修正补丁以及新特性的增加.软件的网址是www.gexperts.org.(注:在最新的Delphi Informant Magazine的读者选择奖评比中GExperts获得了2000年度最

Delphi实现获取磁盘空间大小的方法_Delphi

本文所述Delphi实例用以获取指定的磁盘空间容量大小,检测磁盘大小,从combox中选择磁盘代号等功能.点击"检测驱动器"容量信息的按钮,就可以在下边显示出该磁盘的总空间大小以及要用容量的大小.读者可根据需求添加对应的Button与label控件. 主要程序代码如下所示: unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtr

Delphi实现检测并枚举系统安装的打印机的方法_Delphi

本文以实例说明Delphi打印程序的实现方法.该实例可以检测系统中安装的所有打印机,枚举出这些打印机,主要功能代码非常简单,便于大家阅读与理解. 主要功能代码如下: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,Printers, XPMan; type TForm1 = class(TForm) But

delphi实现将BMP格式图形转化为JPG格式图形的方法_Delphi

本文实例讲述了delphi实现将BMP格式图形转化为JPG格式图形的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: procedure ConvertBMPtoJPG(SFileName,DFileName:string); Var   J:TJpegImage;   I:TBitmap;   S,D:String; begin   s:=SFileName;   d:=DFileName;   J:=TJpegImage.Create;   I:=TBitmap.Crea

Delphi编程常用快捷键大全_Delphi

快捷键对于提高编程速度有着很重要的影响,本文汇总整理了Delphi常用的快捷键,供大家参考之用: Ctrl+PageUp将光标移至本屏的第一行,屏幕不滚动. Ctrl+PageDown将光标移至本屏的最后一行,屏幕不滚动. Ctrl+↓向下滚动屏幕,光标跟随滚动不出本屏. Ctrl+↑向上滚动屏幕,光标跟随滚动不出本屏. Ctrl+Shift+NUM在光标行设置最多九个临时标志号,对临时切换非常有用. 行的左边将出现一本书,封面有NUM,再按一次取消设置. Ctrl+NUM直接将光标跳到NUM处