DLL をロードするサード パーツ ライブラリを使用する、動的にロードされる BPL パッケージがあります。
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
関数を使用しています。
DLL のハンドルを渡して呼び出してみたところFreeLibrary
、DLL ファイルを削除できました。FreeLibrary
BPL パッケージまたは第 3 部の BPL のどこかに呼び出しが欠落していると思われます。
上記のような状況 (DLL を使用する第 3 の部分の BPL を静的にリンクする動的にロードされた BPL) では、どこで をFreeLibrary
実行する必要がありますか?