bpl插件系统开发(5)

彻底解决Delphi/C++Builder程序缺少VCL60.bpl运行时错误 在Windows软件开发中,动态链接库(DLL)是模块化编程和代码复用的核心技术,它允许程序在运行时加载共享的函数库,从而减小可执行文件体积并便于更新。然而,这种动态依赖也带来了部署难题,即目标系统若缺少特定DLL,程序将无法启动。Delphi/C++Builder平台特有的Borland包库(BPL)正是这种机制的延伸,专用于承载其可视化组件库(VCL)。当开发者使用“带运行时包编译”选项时,程序便依赖于如VCL60.bpl等外部文件。其技术价值在于实现组件共享和模块化更新,但代价是产生了外部依赖,这在程 阅读详情

在这样的构想下,我们来做一个demos,

我们来定义如下的被IMisDriver驱动的接口,加入现在能想到的简单的应用,我们要作的工作如下

  1. 定义被驱动的接口
  2. 撰写IMisDriver的一个实现,用它来驱动各个接口,IMisDriver通过调用TPluginLoader的获得接口实例.
  3. 撰写每个接口的实现,并生成多个bpl
  4. 用TPluginLoader来载入这些插件,
  5. 主程序,实例化一个TPluginLoader,然后取得IMisLoader的实例,运行它.

我们先来完成第一步

unit InterfaceDefine;

interface

uses DBClient, midasLib, Types, classes;

type

    ITracer = interface
        ['{623B3A22-15CE-4555-B470-C3F4EBEE7EB4}']
        procedure info( const msg: string );
        procedure error( const msg: string );
        procedure debug( const msg: string );
    end;

    ILogin = interface
        ['{082F9C02-B504-4417-ACEB-1C9E3410ADED}']
        procedure login( const user, pwd: string );
        function loginByCookie( const user, pwd: string ): string;
    end;

    IUserInfo = interface
        ['{4DE53541-6FC3-44C7-BA27-49B0827625F0}']
        function information: TObject;
    end;

    IAuthentic = interface
        ['{0E4BCF53-D685-4AC8-9C38-614117E59365}']
        procedure valid( const actionId: string );
        procedure config; 
     end;

    IDataService = interface
        ['{722CE946-1F59-4C67-A0EA-6655F1B1D961}']
        procedure beginTrans;
        procedure commitTrans;
        procedure rollbackTrans;

        function doSelectSql( const theSql: string ): TClientDataset;
        function doSelectValue( const theSql: string ): string;
        procedure doUpdateSql( const delta: string );
        procedure doUpdateSqls( const deltas: TStringDynArray );

    end;

    IShortcutDispather = interface
        ['{A2C08C9E-5B56-4DC9-934B-323CAEC1FF49}']
        function actionOf( const input: TShortCut ): string;
        procedure config;
    end;

    IProcessData = interface
        ['{9368710D-7240-466A-8BCF-0D8B2FF0502D}']
        function process( var theData: TClientDataSet );
    end;

    IActionManager = interface
        ['{0FEE643C-7610-4442-9EB7-5D21A433788A}']
        function processerOf( action: string ): IProcessData;

    end;

    IView = interface( IProcessData )
        ['{5F0000F8-7A9D-4824-915C-20A95A7B01F4}']
        procedure View( var theData: TClientDataSet );
    end;

    IReport = interface( IProcessData )
        ['{DD5A8AE6-37D9-4B9F-A2C9-9BEA9F217F90}']
        procedure report( var theData: TClientDataSet );
    end;

implementation

end.

Delphi控件包安装与排错:从KonopkaControls的BPL/DPK机制说起 在Delphi开发中,集成第三方控件库是提升界面效率与可维护性的常见手段,但安装与加载过程常因对IDE工作机制理解不足而陷入困境。BPL(运行时包)与DPK(包工程)构成了Delphi组件系统的核心,设计期包需正确引用运行期包并注册到组件面板,才能被IDE稳定加载。实际工程中,控件“装好又消失”多半源于路径变更、版本冲突、注册表残留或权限限制,而zip文件完整性(如EOCD缺失)也是被忽视的典型诱因。从VCL界面升级到老项目维护,理解这些原理能显著降低环境类故障排查成本。本文以经典VCL控件集Konopka 阅读详情

相关推荐

delphi中使用bpl模式合作开发的模式示例

本示例演示了, 如何动态加载bpl包文件, 如何动态调用bpl中的函数和窗体 如何在多人开发时,用bpl的方式分工协作

bpl插件系统开发(1)

半路出家的delphier一如我,对于win32api式的调用有着近乎厌恶的抵触情绪,我很早以前看c++的教程时看到lptrXXXXX的变量就头大,以至于到现在都不会用c++,都不曾写成功过那怕一个hello world程序,所以对于dll式的导出函数后面加stdcall使用右到左的参数调用方式,总觉得没有delphi的美感.再加上看到了许多bpl可以导出类,而dll很麻烦的文章,更是坚定了我的方

qiume的专栏 709

bpl插件系统开发

一个插件系统需要什么?       一个最小的插件系统当然需要插件本身,调用插件的容器,最后需要契约.       契约是什么呢?契约就是两个对象相互沟通的一个标准,这个标准应该统一,这样容器才能和不同的插件通讯.我们可以使用接口来表述这个契约.例如 type     IPlugin = interface         ['{48BF4000-B028-4B57-9955-B1A

diligentcat的专栏 1755

Delphi有关包的介绍

第一部分:有关包的介绍一般我们编写编译一个DELPHI应用程序时,会产生一个EXE文件,也就是一个独立的WINDOWS应用程序。很重要的一点:区别于Visual Basic,DELPHI产生的是预先包裹的应用程序是不需要大量的运行库(DLLs)。假设:打开Delphi默认的工程(只有一个空白form),F9她将编译生成一个大约295 KB (Delphi 5)的可执行文件。然后打开Project

intelsong的专栏 1076

Delphi BPL包合并图文教程

Delphi IDE 本身就是一个插件模式的工具,插件的好处不用多说。运行包的BPL,其实就是众多单元的集合,因此可以再次重新组合,只要你将各个BPL包用到的单元再组合一次!本文以  http://code.google.com/p/tangram-plugin-framewor

leon_kin的专栏 4262

bpl插件系统开发(2)

插件规范-----------插件必须实现一个接口,该接口通过 GetObject,SetObject方法让容器和插件能够交互数据.IPlugin = interface        [{48BF4000-B028-4B57-9955-B1A8305DA394}]        function GetRunResult: TObject; //用于向容器返回执行Execut

qiume的专栏 774

Delphi BPL包合并图文教程 IDEWiz tangram-plugin-framework

Delphi BPL包合并图文教程 Framework IDEWiz tangram-plugin-framework elphi IDE 本身就是一个插件模式的工具,插件的好处不用多说。运行包的BPL,其实就是众多单元的集合,因此可以再次重新组合,只要你将各个BPL包用到的单元再组合一次! 本文以http://code.google.com/p/tangram-plugin-frame...

qq_18932003的博客 887

[MyBean说明书]-如何制作BPL插件

DEMO位置:     samples\simpleConsole\Lib-bpl 【步骤】: 1. 首先新建一个BPL工程。 2. 添加一个窗体,实现IPluginForm接口(simpleConsole.exe只能显示IPluginForm插件) 3.在窗体单元的部分注册插件 4.copy到simpleConsole.exe所在目录的plug-ins\下面 5.可以运行simpl...

weixin_34343000的博客 106

我们永远优雅,但绝不炫耀:合并BPL包图文教程!

Delphi IDE 本身就是一个插件模式的工具,插件的好处不用多说。运行包的BPL,其实就是众多单元的集合,因此可以再次重新组合,只要你将各个BPL包用到的单元再组合一次!本文以  http://code.google.com/p/tangram-plugin-framework/ 插件框架自带的BPL包合并向导工具做一次图文介绍! 1、安装好开源插件框架 tangram-plugin后,然后

440

合并BPL包图文教程

<br /> Delphi IDE 本身就是一个插件模式的工具,插件的好处不用多说。运行包的BPL,其实就是众多单元的集合,因此可以再次重新组合,只要你将各个BPL包用到的单元再组合一次!<br />本文以  http://code.google.com/p/tangram-plugin-framework/ 插件框架自带的BPL包合并向导工具做一次图文介绍!<br /> <br />1、安装好开源插件框架 tangram-plugin后,然后点击 菜单 File->New->Others,找到tangra

leonkin的专栏 1433

[转]合并BPL包图文教程!

Delphi IDE 本身就是一个插件模式的工具,插件的好处不用多说。运行包的BPL,其实就是众多单元的集合,因此可以再次重新组合,只要你将各个BPL包用到的单元再组合一次! 本文以 http://code.google.com/p/tangram-plugin-framework/ 插件框架自带的BPL包合并向导工具做一次图文介绍! 1、安装好开源插件框架 tangram-plugin...

weixin_30332241的博客 164
上一篇: bpl插件系统开发(4)
下一篇: 停止更新
JavaD
博客等级 码龄23年 3粉丝 11原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值