How to use variant arrays in Delphi

て烟熏妆下的殇ゞ 提交于 2019-11-30 11:22:21
Runner

You create it like that:

Declarations first

var
  VarArray: Variant;
  Value: Variant;

Then the creation:

VarArray := VarArrayCreate([0, Length - 1], varVariant);

or you could also have

VarArray := VarArrayCreate([0, Length - 1], varInteger);

Depends on the type of the data. Then you iterate like this:

i := VarArrayLowBound(VarArray, 1);
HighBound := VarArrayHighBound(VarArray, 1);

while i <= HighBound do
begin
  Value := VarArray[i];
  ... do something ...
  Inc(i);
end;

Finally you clear the array when you don't need it anymore. EDIT: (This is optional, see In Delphi 2009 do I need to free variant arrays? )

VarClear(VarArray);

That is all there is to it. For another example look at the official Embracadero Help

EDIT:

The array should be created only once. Then just use it like shown in the above example.

For the other side:

(assuming Value is the Variant parameter and the element type is 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;  
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!