bpl插件系统开发(1)

Java-仓库管理系统 该文档旨在定义并描述一个仓库管理系统的功能和特性,系统使用MySQL数据库,并采用SpringBoot+Vue的前后端分离开发模式。本文档将涵盖系统的主要功能、用户权限管理、数据结构和交互流程。仓库管理系统基于SpringBoot和Vue构建,实现了前后端分离开发模式。系统应该使用MySQL数据库进行数据存储。出库记录表(OutboundRecord)入库记录表(InboundRecord)IDE工具,如IntelliJ IDEA。仓库表(Warehouse)SpringBoot开发环境。 阅读详情

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

   开始吧.....

 

   一个插件系统需要什么?

      一个最小的插件系统当然需要插件本身,调用插件的容器,最后需要契约.

      契约是什么呢?契约就是两个对象相互沟通的一个标准,这个标准应该统一,这样容器才能和不同的插件通讯.我们可以使用接口来表述这个契约.例如

type
    IPlugin = interface
        ['{48BF4000-B028-4B57-9955-B1A8305DA394}']
        procedure Execute;
    end;

      容器,它可以配置加载哪些插件,并能调用插件的功能,并和插件交互数据,这种数据应该有统一性,因此我们的目标当然是需要和插件能够交互TObject,因为我们可以封装任何的数据在TObject中去,至于这个TObject中是些什么什么数据,只需要插件和容器知道就可以了.那么我们修改契约如下:

type
    IPlugin = interface
        ['{48BF4000-B028-4B57-9955-B1A8305DA394}']
        function GetObject: TObject;
        procedure SetObject( value: TObject );
        procedure Execute;
    end;

      插件,我们使用实现了接口的一个bpl来构建插件,让容器动态载入一个bpl,然后访问其中的IPlugin来调用插件

coding吧

我们构造一个容器,它动态的载入一个bpl,并且通过预定义的名称来访问其中的 IPlugin,并调用IPlugin.Execute,这个预定义的名称其实是在bpl中实现了IPlugin的类的名称,这个类的名称我们可以通过修改bpl的名称或者同时发布一个配置文件来让容器获得.现在我们先暂时写死在程序里,毕竟这个问题是个小问题

 

构建插件

   new->package生成一个package,就用'package1'的缺省名称,new->unit

unit TPluginImpl1;

interface

uses uIPlugin, dialogs, Classes;

type
{$M+}
    TPlugin = class( TInterfacedPersistent, IPlugin )
        function GetObject: TObject;
        procedure SetObject( value: TObject );
        procedure Execute;
    private
        FMsg: string;
    public
        procedure AfterConstruction; override;
    end;
{$M-}
implementation

{ TPlugin }

procedure TPlugin.AfterConstruction;
begin
    inherited;
    FMsg := 'init String';
end;

procedure TPlugin.Execute;
begin
    showmessage( FMsg );
end;

function TPlugin.GetObject: TObject;
begin
    result := TObject( FMsg );
end;

procedure TPlugin.SetObject( value: TObject );
begin
    FMsg := string( Value );
end;

initialization
    RegisterClass( TPlugin );

finalization
    UnRegisterClass( TPlugin );

end.

TPlugin实现了IPlugin接口,并且注册了该组件,使它能够被容器访问到.

compile,之后,会在%delphi%/bpl目录生成package1.bpl.

构建容器

procedure TForm3.Button1Click( Sender: TObject );
var
    theClass             : TPersistentClass;
    thePlugin            : TPersistent;
    IPlug                : IPlugin;
    FPackege             : Cardinal;
begin
    FPackege := LoadPackage( 'package1.bpl' ); //加载包

    theClass := GetClass( 'TPlugin' );  //通过字符串获得类定义
    if theClass = nil then
    begin
        ShowMessage( 'TPlugin not load' );
        exit;
    end;
    thePlugin := theClass.Create;       //创建实例
    Supports( thePlugin, StringToGUID( '{48BF4000-B028-4B57-9955-B1A8305DA394}'
        ), IPlug );                     //转换成IPlugin接口
    try
        IPlug.Execute;                  //执行插件的
    finally
        IPlug := nil;
    end;
    UnloadPackage( FPackege );          //卸载包
end;

project->options->package

点选build with  runtime package

修改成vcl;rtl,确定

可以发布测试了

拷贝你的project1.exe,package1,windowSystem32目录下的vcl70.bpl,rtl70.bpl到一个目录,把他们拷贝到一个目录下,发布到一个没有delphi的机器上试试吧.

java图形界面swing 连接sql server数据库 实现电力公司收费管理系统(适用于、大作业) 之前做了一个外卖点餐系统之后点此查看详情,这段时间在这个系统的基础上改了改帮几位同学实现了其他的几个系统,本文所述的电力收费系统就是其中之一。 一、数据库表及字段 1、员工表 2、用电类型表 3、顾客表 4、用电信息表 5、费用表 6、缴费表 7、结余表 ... 阅读详情

相关推荐

数据库程案例——电力公司收费管理系统分析与实践,完整带SQL语句

某电力公司收费管理信息系统实现客户信息、用电类型(类别号、类别名、电价)及业务员管理;实现客户用电信息管理(客户号、月份、用电类别号、用电度数);实现客户费用管理(客户号、月份、费用、收费标志),收费标志的默认值为“未收”;实现收费登记(客户、月份、应收费用、实收费用、业务员),并自动修改收费标志(用触发器实现);创建触发器,实现收费时自动更加应收费用和实收费用,计算本次结余,然后修改客户信息表中的结余金额;创建存储过程统计指定月份应收费用和实收费用;创建存储过程查询指定月份未交费的用户信息,以便崔费;创建

qq_44242804的博客 2748

数据库计某电力公司收费系统.doc

数据库计某电力公司收费系统

基于java智慧医疗预约挂号管理系统计与实现

在患者就医和患者的信息管理方面,往常的就医问诊模式之下都是采用的是人工线下的进行管理和整理工作,在这一过程之中存在这一定的不安全和低效性,面对与患者的基数的越来越大,患者的信息管理也在面领着巨大的挑战,管理人员面领着巨大的患者信息的信息量,运用之前的信息管理方式往往会在统计和登记上出现错误的情况的产生,为后续的管理工作造成了一定的困难。信息化的智慧医疗预约挂号管理系统的实现不仅给患者的预约管理工作带来了方便也进一步的促进了医疗事业信息化的发展,从而实现高效化的就医工作。2.3 mysql数据库 3。

qq_33037637的博客 427

数据库计某电力公司收费系统.docx

数据库计某电力公司收费系统.docx数据库计某电力公司收费系统.docx数据库计某电力公司收费系统.docx数据库计某电力公司收费系统.docx数据库计某电力公司收费系统.docx数据库计某电力公司收费系统.docx数据库计某电力公司收费系统.docx数据库计某电力公司收费系统.docx

学生宿舍管理系统控制台+MySQL】(Java

学生宿舍管理系统控制台+MySQL】(Java

我从不打没有准备的仗! 6556

Java综合:公园管理系统的简单实现 Java + MySQL + Swing

公园管理系统的简单实现 Java +MySQL + GUI

qq_53130059的博客 3733

Eclipse+Java+Swing+Mysql实现自助存取款机(ATM)系统

1.登录系统2.注册系统3.取款4.存款5.转账6.余额查询7.退出系统。

reg183的专栏 2399

Java项目之宠物管理系统(附源码+论文)

本论文系统地描绘了整个网上宠物管理系统计与实现,主要实现的功能有以下几点:管理员;首页、个人中心、宠物分类管理、商品分类管理、宠物用品管理、宠物商店管理、宠物领养管理、用户管理、宠物寄存管理、用户领养管理、宠物挂失管理、论坛管理、管理员管理、系统管理、订单管理,前台首页;首页、宠物用品、宠物商店、宠物领养、宠物挂失、论坛信息、宠物资讯、个人中心、后台管理、购物车、客服,用户;

2301_76953549的博客 2437

Eclipse+Java+Swing实现宠物商店管理系统-TXT存储信息

Java+Swing实现宠物商店一、系统介绍二、系统展示1.主界面2.增加宠物3.删除宠物4.修改宠物5.查询宠物6.模块查询三、系统实现Cat.javaDog.javaMouse.javaMainScreen.javaPetShop.java四、其他1.其他系统实现2.获取源码 一、系统介绍 本系统通过文件系统实现实现宠物的增删改查。 二、系统展示 1.主界面 2.增加宠物 3.删除宠物 4.修改宠物 5.查询宠物 6.模块查询 三、系统实现 Cat.java package com.sjsq

水坚石青的博客 9835

基于java+ssh的医院在线挂号系统计与实现毕业(项目报告+答辩PPT+源代码+数据库+讲解视频)

项目报告基于SSH的医院在线挂号系统计与实现互联网技术迅速的发展给我们的生活带来很大的方便,同时也让许多行业迅速的发展起来。互联网技术已走向科技发展的巅峰期,我们要做的就是合理的使用互联网技术让我们的各个行业得到更快速的发展。就医疗领域来说,如今看病难已成为我们生活中的一大难题,传统的医院挂号中,我们需要用手动方式来处理信息,这种方式需要我们的医护工作人员和管理人员花费大量的时间来处理事务性信息,不仅劳动强度大,而且浪费时间。患者长时间的排队等候不仅延误了患者病情,而且不利于医院秩序的维护。所以在这里我的

woaimx_1314的博客 778

基于 Java+MySQL 实现(GUI)医院简易挂号管理系统【100011071】

采用桌面应用程序模式,开发一个医院挂号系统,管理包括人员、号种及其挂号费用,挂号退号等信息,完成登录、挂号、查询和统计打印功能。

库存管理:使用JavaMYSQL的库存管理系统

库存管理系统 用于库存管理的多用户RDBMS系统作为我第二年的UG程的一部分,从事此项目。 科技栈JavaFX,MySQL 环境 聪明的想法 MySQL工作台8 JDK 8 Gluon Scene Builder 原型:

基于java+MySQL的宠物管理系统

基于java+MySQL的宠物管理系统

Java 学生成绩管理系统(基于GUI和数据库的建立)

Java

Amittedly的博客 2351

基于java+mysql+控件台学生信息管理系统

项目类型:Java SE项目(控制台打印)项目名称:基于Java学生信息管理系统(student_sys)当前版本:V3.0版本用户类型:单用户(只有管理员)开发语言:java语言运行工具:Eclipse/MyEclipse都可以,eclipse最兼容适用场景:计参考学习功能描述:本系统属于控制台打印输出操作,管理员登录后对其学生信息进行增删改查。

qq_33037637的博客 160

【原创】java+swing+mysql教师管理系统计与实现

本系统为java+swing+mysql的教师管理系统,管理员、教师 功能如下: 管理员:教师管理;修改密码;退出;教师:修改个人资料;修改密码;退出;

计算机软件编程,包含Java、Php、Python、前后端、数据库等实战项目 1572

学生成绩管理系统GUI界面

JOptionPane.showMessageDialog(jf, "请 输 入 账 号","",JOptionPane.WARNING_MESSAGE);JOptionPane.showMessageDialog(jf, "请 输 入 密 码","",JOptionPane.WARNING_MESSAGE);JOptionPane.showMessageDialog(jf, "请 输 入 密 码","",JOptionPane.WARNING_MESSAGE);

weixin_73044880的博客 419
上一篇: 执行并等待进程完成
下一篇: bpl插件系统开发(2)
qiume
博客等级 码龄25年 139粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值