Как обнаружить UnloadPackage из целевого BPL? - PullRequest
0 голосов
/ 27 июня 2019

Есть ли часть кода, которая выполняется, когда динамический пакет выгружается, вызывая функцию UnloadPackage?

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

В этом случае мне нужно выполнить некоторый код внутри MyPackage.bpl при выгрузке

1 Ответ

0 голосов
/ 27 июня 2019

Общее правило заключается в том, что вы должны поместить код, который должен вызываться при выгрузке пакета, в часть finalization вашего устройства.Я знаю из вашего другого пакета, что вы пытаетесь выгрузить DLL.Но подвох в том, что никогда не следует загружать / выгружать dll из initialization или finalization.

Так что вам нужно сделать, чтобы в вашем пакете была функция, которую вы будете вызывать из основного приложения,выполняет очистку.

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;
...