У меня есть динамически загруженный пакет 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