1

DLL をロードするサード パーツ ライブラリを使用する、動的にロードされる BPL パッケージがあります。

UnloadPackageBPL パッケージを呼び出した後も、アプリケーションは 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関数を使用しています。

DLL のハンドルを渡して呼び出してみたところFreeLibrary、DLL ファイルを削除できました。FreeLibraryBPL パッケージまたは第 3 部の BPL のどこかに呼び出しが欠落していると思われます。

上記のような状況 (DLL を使用する第 3 の部分の BPL を静的にリンクする動的にロードされた BPL) では、どこで をFreeLibrary実行する必要がありますか?

4

0 に答える 0