var ModuleInstance1: HMODULE; {$R *.dfm} // 动态加载 Package procedure TForm0.Button1Click(Sender: TObject); begin ModuleInstance1 := LoadPackage('Package1.bpl'); end; // 将 Package 中的 Form1 带出 procedure TForm0.Button2Click(Sender: TObject); var frm: TcustomForm; begin frm:= CreateFormByClassName('TForm1'); try frm.ShowModal; finally frm.Release; end; end; procedure TForm0.Button3Click(Sender: TObject); begin UnloadAddInPackage(ModuleInstance1); end; // 自订函式 – CreateFormByClassName() , 建立 Form function TForm0.CreateFormByClassName(const ClassName: string): TCustomForm; var AClass: TPersistentClass; begin AClass := GetClass(ClassName); if AClass=nil then exit; Result := TComponentClass(AClass).Create(Application) as TCustomForm; // 或 Result := TCustomForm(TComponentClass(AClass).Create(Application)); end; // 自订函式 – CreateDataModuleByClassName() , 建立数据模块 function TForm0.CreateDataModuleByClassName(const ClassName: string): TDataModule; var AClass: TPersistentClass; begin Result := nil; AClass := GetClass(ClassName); if AClass=nil then exit; Result := TComponentClass(AClass).Create(Application) as TDataModule; end; // 自订函式 – UnloadAddInPackage() , 释放 Package procedure TForm0.UnloadAddInPackage(ModuleInstance: HMODULE); var i: Integer; M: TMemoryBasicInformation; begin for i := Application.ComponentCount - 1 downto 0 do begin VirtualQuery(GetClass(Application.Components[i].ClassName), M, SizeOf(M)); if (ModuleInstance = 0) or (HMODULE(M.AllocationBase) = ModuleInstance) then Application.Components[i].Free; end;
{$R *.dfm}
// 动态加载 Package
procedure TForm0.Button1Click(Sender: TObject);
begin
ModuleInstance1 := LoadPackage('Package1.bpl');
end;
// 将 Package 中的 Form1 带出
procedure TForm0.Button2Click(Sender: TObject);
var frm: TcustomForm;
begin
frm:= CreateFormByClassName('TForm1');
try
frm.ShowModal;
finally
frm.Release;
end;
end;
procedure TForm0.Button3Click(Sender: TObject);
begin
UnloadAddInPackage(ModuleInstance1);
end;
// 自订函式 – CreateFormByClassName() , 建立 Form
function TForm0.CreateFormByClassName(const ClassName: string):
TCustomForm;
var AClass: TPersistentClass;
begin
AClass := GetClass(ClassName);
if AClass=nil then exit;
Result := TComponentClass(AClass).Create(Application) as
TCustomForm;
// 或 Result :=
TCustomForm(TComponentClass(AClass).Create(Application));
end;
// 自订函式 – CreateDataModuleByClassName() , 建立数据模块
function TForm0.CreateDataModuleByClassName(const ClassName:
string): TDataModule;
var AClass: TPersistentClass;
begin
Result := nil;
AClass := GetClass(ClassName);
if AClass=nil then exit;
Result := TComponentClass(AClass).Create(Application) as
TDataModule;
end;
// 自订函式 – UnloadAddInPackage() , 释放 Package
procedure TForm0.UnloadAddInPackage(ModuleInstance: HMODULE);
var
i: Integer;
M: TMemoryBasicInformation;
begin
for i := Application.ComponentCount - 1 downto 0 do
begin
VirtualQuery(GetClass(Application.Components[i].ClassName), M,
SizeOf(M));
if (ModuleInstance = 0) or (HMODULE(M.AllocationBase) =
ModuleInstance) then
Application.Components[i].Free;
end;