arrays delphi automation delphi-7 variant

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;