Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #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
Poder: 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
  #2  
Antiguo 22-09-2021
PepCat PepCat is offline
Miembro
 
Registrado: mar 2017
Posts: 96
Poder: 8
PepCat Va por buen camino
No es una solucion elegante pero quizas te sirva:

Código:
class function TForm1.VariantToArray < T > (V: OleVariant): Tarray < variant > ;
Responder Con Cita
  #3  
Antiguo 23-09-2021
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Muchas gracias! Sí, así funciona.

Y en realidad ya tengo el mismo array de variants dentro de la respuesta en el variant.

Quería saber si podía pasarlo a un array con un tipo de dato definido con una función generica.

La finalidad es por ej, cargarlos directamente a un TStringList si todo es un TArray < string > o pasarlo por parámetro en una función que me pida un TArray < integer >
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
funcion carl778 Varios 9 02-11-2017 14:08:53
Funcion en C# Panasys .NET 3 09-07-2015 16:42:41
Función javascript que llama a otra función javascript en otra página jandroruiz HTML, Javascript y otros 4 28-02-2013 11:38:00
Funcion fafita Varios 7 25-01-2008 16:03:40
Aplicacion que retorne un valor Enan0 Varios 6 23-11-2005 16:30:44


La franja horaria es GMT +2. Ahora son las 14:25:39.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi