中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Delphi > 综合文章
bpl 使用之我见 作者:陈晓兵 lead001@126.com, lead@people.com.cn
作者:未知 时间:2005-07-27 22:03 出处:CSDN 责编:chinaitpower
              摘要:bpl 使用之我见 作者:陈晓兵 lead001@126.com, lead@people.com.cn

 bpl 使用之我见

写在前面
  在此不再赘述bpl与dll的比较,只介绍bpl的动态调用。如需转载敬请保留原版作者信息,
  及实现部分的完整性,
开始---------------------------------------->
        实现过程
           <第一部分 接口单元>
                创建一个接口单元
                {$WEAKPACKAGEUNIT}
                unit uInterface;

                interface
                uses
                  Classes, Forms;
                type
                  TBaseClss = class(TComponent)
                    function CreateForm:TForm; virtual; stdcall;abstract;
                    ...
                  end;

                implementation

                { TBaseClss }


                end.


            <第二部分 调用的主程序>
                选项设置
                Project -> Options -> Packages : Runtime Packages
                        将Build with Runtime Packages复选框选中;

                引用uInterface单元

                调用过程
                function LoadPacket(Fbpl, FClass: String): Boolean;
                var
                  FForm  : TForm;
                  FPersistentClass: TPersistentClass;
                  FBaseClss : TBaseClss;
                  H: HMODULE;
                begin
                  try
                    try
                      H := 0;
                      H := LoadPackage(Fbpl);
                      FPersistentClass := FindClass(FClass);
                      if FPersistentClass <> nil then
                      begin
                        FBaseClss :=
                        TBaseClss(TComponentClass(FPersistentClass).Create(Application));
                        FForm := nil;
                        FForm := FBaseClss.CreateForm;
                        FBaseClss.Free;
                        FBaseClss := nil;
                        FPersistentClass := nil;
                        if Assigned(FForm) then
                        begin
                          FForm.ShowModal;
                          FreeAndNil(FForm);
                        end;
                      end;
                    except
                      Application.MessageBox('此功能未安装', '提示', MB_OK +
                        MB_ICONINFORMATION);
                    end;
                  finally
                    if H <> 0 then
                    begin
                      UnloadPackage(H);
                      H := 0;
                    end;
                  end;
                end;

            <第三部分 创建bpl包>
                创建包

                引用uInterface单元

                创建接口类,实现TBaseClss
                  TTestClass = class(TBaseClss)
                    function CreateForm:TForm; override;
                    ...
                  end;

                function TTestClass.CreateForm: TForm;
                var
                  Form2: TForm2;
                begin
                  Form2 := TForm2.Create(Application);
                  if Assigned(Form2) then
                    Result := Form2
                  else
                    Result := nil;
                end;


                注册类
                initialization
                  RegisterClass(TTestClass);
                  UnRegisterClass(TBaseClss);
                反注册类
                finalization
                  UnRegisterClass(TTestClass);
----------------------------------------结束>


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有