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))] else
begin
for i := VarArrayLowBound(V, 1) to VarArrayHighBound(V, 1) do
Result := Result + [string(VarAsType(V, varString))] 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);
Label1.Caption := RespArray [0];
Label2.Caption := RespArray [1];
end;