Я пытаюсь найти безопасный / детерминированный способ выпустить интерфейс, инкапсулированный в 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;
Безопасно ли это решение или есть лучшее решение, которое я упустил?