我有一个动态加载的 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,它静态链接使用 DLL 的第三方 BPL),应该在哪里FreeLibrary
执行?