1

我有一个动态加载的 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执行?

4

0 回答 0