Convertir el objeto en un tipo de interfaz sin TInterfacedObject como clase base

Necesito una interfaz de implementación de clase sin recuento de referencias. Hice lo siguiente:

  IMyInterface = interface(IInterface)
      ['{B84904DF-9E8A-46E0-98E4-498BF03C2819}'] 
      procedure InterfaceMethod;
  end;

  TMyClass = class(TObject, IMyInterface)
  protected
      function _AddRef: Integer;stdcall;
      function _Release: Integer;stdcall;
      function QueryInterface(const IID: TGUID; out Obj): HResult;stdcall;
  public
      procedure InterfaceMethod;
  end;

  procedure TMyClass.InterfaceMethod;
  begin
      ShowMessage('The Method');
  end;

  function TMyClass.QueryInterface(const IID: TGUID; out Obj): HResult;
  begin
      if GetInterface(IID, Obj) then
          Result := 0
      else
          Result := E_NOINTERFACE;
  end;

  function TMyClass._AddRef: Integer;
  begin
      Result := -1;
  end;

  function TMyClass._Release: Integer;
  begin
      Result := -1;
  end;

La falta de conteo de referencias funciona bien. Pero mi preocupación es que no puedo lanzar.TMyClass aIMyInterface utilizandoas operador:

var
  MyI: IMyInterface; 
begin
  MyI := TMyClass.Create as IMyInterface;

Me dan

[Error DCC] El operador E2015 no se aplica a este tipo de operando

El problema desaparece cuandoTMyClass deriva deTInterfacedObject - Es decir, puedo hacer ese casting sin error de compilación. Obviamente, no quiero usar TInterfacedObject como clase base, ya que haría que mi referencia de clase contara. ¿Por qué no se permite tal lanzamiento y cómo se podría solucionarlo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta