OleVariantにカプセル化されたインターフェースをリリースするための安全で決定論的な方法を見つけようとしています。
AFAICS Delphiは、プロシージャの最後にインターフェイス参照をリリースしますが、私の場合は、COMをシャットダウンする必要があるため、以前にリリースする必要があります。
procedure Test;
var
LLibrary: OleVariant;
begin
CoInitialize(nil);
try
LLibrary := Null;
try
LLibrary := CreateOleObject(LibraryName);
finally
LLibrary := Unassigned; // <-- I would like to release the interface here
end;
finally
CoUninitialize; // <-- Shutdown of COM
end;
end; // <-- The compiler releases the interface here
私は、OleVariantを、呼び出す前に解放できる追加のクラスインスタンスに配置することを考えましたCoUninitialize。
procedure Test;
var
Container: TLibraryContainer; // Holds the OleVariant
begin
CoInitialize(nil);
try
Container := TLibraryContainer.Create;
try
{...}
finally
Container.Free;
end;
finally
CoUninitialize;
end;
end;
この解決策は安全ですか、それとも私が見落としていたより良い解決策がありますか?