arrays - Cómo utilizar matrices de variantes en Delphi
automation delphi-7 (2)
Lo creas así:
Declaraciones primero
var
VarArray: Variant;
Value: Variant;
Luego la creación:
VarArray := VarArrayCreate([0, Length - 1], varVariant);
o también podrías tener
VarArray := VarArrayCreate([0, Length - 1], varInteger);
Depende del tipo de datos. Entonces iteras así:
i := VarArrayLowBound(VarArray, 1);
HighBound := VarArrayHighBound(VarArray, 1);
while i <= HighBound do
begin
Value := VarArray[i];
... do something ...
Inc(i);
end;
Finalmente borras la matriz cuando ya no la necesitas. EDITAR: (Esto es opcional, vea En Delphi 2009, ¿necesito liberar matrices de variantes? )
VarClear(VarArray);
Eso es todo lo que hay que hacer. Para otro ejemplo, mira la Ayuda oficial de Embracadero.
EDITAR:
La matriz se debe crear una sola vez. Luego solo úselo como se muestra en el ejemplo anterior.
Tengo dos programas Delphi7: un servidor de automatización COM (EXE) y el otro programa que usa el servidor de automatización.
Necesito pasar una matriz de bytes de un programa a otro.
Después de algunas búsquedas he encontrado que usar matrices de variantes es el camino a seguir (corríjame por favor si conoce algún método mejor).
Mi pregunta es: ¿Cómo creo una matriz variante en un programa y luego cómo leo sus valores en el otro?
Sé sobre VarArrayCreate y VarArrayLowBound / VarArrayHighBound, pero no estoy seguro de cómo hacerlo correctamente.
¡Gracias!
Por el otro lado:
(asumiendo que Value es el parámetro Variant y el tipo de elemento es WideString)
var
Source: PWideStringArray;
if VarIsArray(Value) then begin
Source:= VarArrayLock(Value);
try
for i:= 0 to TVarData(Value).VArray^.Bounds[0].ElementCount - 1 do
DoWhatEverYouWantWith(Source^[i]);
end;
finally
VarArrayUnlock(Value);
end;
end;