首页>> 软件工程 >>内容  

bpl 使用之我见
2006年2月7日 10:59 作者:不详 来源:中国烟机备件网
 

bpl 使用之我见 作者:陈晓兵 lead001@126.com, lead@people.com.cn
 

写在前面
  在此不再赘述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);
----------------------------------------结束>


 
 

【相关文章】
用Delphi制作DLL
error loading midas.dll问题
用VC创建供PB调用的DLL 选择自 sillywxj 的 Blog
Bpl的使用以及与Dll的区别
Delphi中高级DLL的编写和调用
在Delphi应用程序中使用DLL
写调用动态链接库DLL的应用程序
Delphi中的DLL的编写
在DELPHI应用程序中使用DLLs
DELPHI中使用DLL
如何编写DLL中包含子窗体及调用代源
DLL相关
dll的PPT
也谈利用DLL加强用户口令的问题
[调用DLL里的窗体]-------同样的程序,放在不同的机子就出现不同情况
Dephi 之DLL技巧汇集

Copyright 2003-2005 创想软件 All Rights Reserved

江苏徐州:TEL:13196811515,13815325665
Email:ntcreating@163.com QQ:46519970 317174686  MSN:kaiserma2004@hotmail.com