Где вызвать FreeLibrary для библиотек DLL, используемых динамическими пакетами? - PullRequest
1 голос
/ 26 июня 2019

У меня есть динамически загруженный пакет BPL , который использует библиотеку третьей части, которая загружает DLL.

После вызова UnloadPackage для моего пакета BPL приложение по-прежнему блокирует файл DLL.

var
  MyPackageHandle : THandle;
  MyPackageClass : TPersistentClass;
  MyPackageForm : TCustomForm;
begin
  MyPackageHandle := LoadPackage('.\MyPackage.bpl');
  if(MyPackageHandle <> 0) then 
  begin
    try
      MyPackageClass := GetClass('TMyPackageForm');
      if(Assigned(MyPackageClass) then
      begin
        MyPackageForm := TComponentClass(MyPackageClass).Create(nil) as TCustomForm;
        MyPackageForm.ShowModal();
        MyPackageForm.Free();
      end;
    finally
      UnloadPackage(MyPackageHandle);
    end;
  end;
end;

Для тестирования я использую функцию Windows.GetModuleHandle.

Я пытался вызвать FreeLibrary, передавая дескриптор DLL итогда я могу удалить файл DLL.Я подозреваю, что вызов FreeLibrary отсутствует где-то в моем пакете BPL или в третьей части BPL.

В состоянии, подобном описанному выше (динамически загружаемый BPL, который статически связывает третью часть BPL, которая используетDLL), где должен выполняться FreeLibrary

...