Каков правильный способ освободить интерфейс за OleVariant?

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

Безопасно ли это решение или есть лучшее решение, которое я упустил?

8
задан Jens Mühlenhoff 19 July 2011 в 10:33
поделиться