| 導購 | 订阅 | 在线投稿
分享
 
 
 

bpl 使用之我見 作者:陳曉兵 lead001@126.com, lead@people.com.cn

來源:互聯網網民  2006-01-31 22:24:31  評論

bpl 使用之我見

作者:陳曉兵 lead001@126.com, lead@people.com.cn

寫在前面

在此不再贅述bpl與dll的比較,只介紹bpl的動態調用。

bpl 使用之我見 作者:陳曉兵 lead001@126.com, lead@people.com.cn
如需轉載敬請保留原版作者信息,

及實現部分的完整性,

開始---------------------------------------->

實現過程

<第一部分 接口單元>

創建一個接口單元

{$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);

----------------------------------------結束>

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
bpl 使用之我見 作者:陳曉兵 [url=mailto:lead001@126.com]lead001@126.com[/url], [url=mailto:lead@people.com.cn]lead@people.com.cn[/url] 寫在前面 在此不再贅述bpl與dll的比較,只介紹bpl的動態調用。[img]http://dev.csdn.net/fckeditor/editor/images/smiley/msn/teeth_smile.gif[/img]如需轉載敬請保留原版作者信息, 及實現部分的完整性, 開始----------------------------------------> 實現過程 <第一部分 接口單元> 創建一個接口單元 {$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); ----------------------------------------結束>
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 
 熱帖排行
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有