如何从目标BPL中检测UnloadPackage?

时间:2019-06-27 06:50:46

标签: delphi package delphi-2007

在卸载dynamic package并调用UnloadPackage函数时是否执行了一部分代码?

var
  MyPackageHandle : THandle;
begin
  MyPackageHandle := LoadPackage('.\MyPackage.bpl');
  if(MyPackageHandle <> 0) then 
    UnloadPackage(MyPackageHandle);
end;

在这种情况下,我需要在 MyPackage.bpl 中执行一些代码,

1 个答案:

答案 0 :(得分:0)

一般规则是,在将程序包卸载到单元的finalization部分时,应放置需要调用的代码。我从您的其他软件包中知道您正在尝试卸载dll。但是要注意的是,永远不要从initializationfinalization加载/卸载dll。

因此,您需要做的是在程序包中有一个函数,您可以从主应用程序中调用该函数来执行清理工作。

type
  TCleanup = procedure;
var
  MyPackageHandle : THandle;
  CleanupProc: TCleanup;
begin
  MyPackageHandle := LoadPackage('.\MyPackage.bpl');
  if(MyPackageHandle <> 0) then
  begin
    @CleanupProc := GetProcAddress(MyPackageHandle, 'Cleanup' );
    if @CleanupProc <> nil then
      CleanupProc;
    UnloadPackage(MyPackageHandle);
  end;
end;