Ver Mensaje Individual
  #1  
Antiguo 22-09-2021
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Reputación: 20
movorack Va camino a la famamovorack Va camino a la fama
Función que retorne Tarray<T>

Hola compañeros,

Antes que nada, les agradezco su atención y las respuestas que me puedan dar tanto como para solucionar o poder plantearme otra solución.

Estoy consumiendo unos objetos DCOM que devuelven unos OleVariant alimentados como arrays. Los cuales se les puede hacer un manejo como muestro a continuación

Código Delphi [-]
procedure MiFuncionDCOM;
  var
    Response: OleVariant;
begin
  Response := DCOMConnection.AppServer.MiFuncion;
  
  Label1.Caption := Response[0];
  Label2.Caption := Response[1];
end;

Y quisiera llevar esa respuesta a un array generico. Algo como TArray < T >

El inconveniente que tengo es que al tratar de devolver, un array de enteros me genera el error "E2010 Incompatible types: 'T' and 'Integer'". Igual sucede para otros tipos como double, string, etc.

Código Delphi [-]
class function TForm1.VariantToArray < T > (V: OleVariant): Tarray < T >;
begin
  Result := [1, 2, 3];
end;

la función, sin completar ya que el error no me deja avanzar, Es esta:

Código Delphi [-]
class function TForm1.VariantToArray < T > (V: OleVariant): Tarray < T > ;
  var
    i: Integer;
begin
  Result := [];

  if VarIsEmpty(V) or VarIsNull(V) then
    Exit;

  case GetTypeKind(T) of
    tkString: begin
      if not VarIsArray(V) then
        Result := [string(VarAsType(V, varString))] // <-- E2010 Incompatible types: 'T' and 'string'
      else
      begin
        for i := VarArrayLowBound(V, 1) to VarArrayHighBound(V, 1) do
          Result := Result + [string(VarAsType(V, varString))] // <-- E2010 Incompatible types: 'T' and 'string'
      end;
    end;
   tkInteger : ;
   tkFloat: ;
  end;
end;

Entiendo que el error de genera porque espera elementos de tipo T, aunque también pensaba que al hacer uso de la función era donde se definiría el tipo de elemento.

Código Delphi [-]
procedure MiFuncionDCOM;
  var
    Response: OleVariant;
    RespArray: TArray < string > ;
begin
  Response := DCOMConnection.AppServer.MiFuncion;
  RespArray := VariantToArray<string>(Response); //Devuelve TArray < string >
  
  Label1.Caption := RespArray [0];
  Label2.Caption := RespArray [1];
end;
__________________
Buena caza y buen remar... http://mivaler.blogspot.com

Última edición por movorack fecha: 22-09-2021 a las 00:42:47.
Responder Con Cita