下面是一段调用BPL的测试程序,主要是用来测试BPL的调用和释放,如有什么更好的建议请指出[up有分]
------------------------------------
unit TestProc;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TDoRTL = function (AHandle : THandle):LongInt;StdCall; TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
SysHandle : THandle;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
DoRTL : TDoRTL;
begin
If SysHandle = 0 then
SysHandle := LoadPackage('MyBPL.bpl'); //载入BPL If SysHandle <> 0 then
begin
@DoRTL := GetProcAddress(SysHandle,'DoRTL'); //得到地址
If @DoRTL <> Nil then
DoRtl(Application.Handle);
end;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
If SysHandle <> 0 then
Begin
UnLoadPackage(SysHandle); //释放内存
SysHandle := 0; //释放句柄
End;
end;
------------------------------------
unit TestProc;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TDoRTL = function (AHandle : THandle):LongInt;StdCall; TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
SysHandle : THandle;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
DoRTL : TDoRTL;
begin
If SysHandle = 0 then
SysHandle := LoadPackage('MyBPL.bpl'); //载入BPL If SysHandle <> 0 then
begin
@DoRTL := GetProcAddress(SysHandle,'DoRTL'); //得到地址
If @DoRTL <> Nil then
DoRtl(Application.Handle);
end;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
If SysHandle <> 0 then
Begin
UnLoadPackage(SysHandle); //释放内存
SysHandle := 0; //释放句柄
End;
end;
Button2是用来释放BPL
好处在于可以共享环境,不足之处是在发行时要附加很多Delphi的BPL
你会发现 打开 Delphi 将所有的包 BPL 都读取了
如果这么用的话, 还是用dll。bpl一般是用runtime package。
或者是控件bpl包,直接静态编译进去就可以了~~~
在里面打个勾,把需要作为runtime的package输在下面的框内!