如何在Delphi中使用变量数组

时间:2010-09-01 15:34:34

标签: arrays delphi automation delphi-7 variant

我有两个Delphi7程序:一个COM自动化服务器(EXE)和另一个使用自动化服务器的程序。

我需要将一个字节数组从一个程序传递给另一个程序。

经过一番搜索,我发现使用变体数组是可行的方法(如果你知道更好的方法,请纠正我。)

我的问题是: 如何在一个程序中创建变量数组,然后如何在另一个程序中读取它的值?

我了解VarArrayCreate和VarArrayLowBound / VarArrayHighBound,但我不确定如何正确地做到这一点。

谢谢!

2 个答案:

答案 0 :(得分:27)

你可以这样创建:

首先声明

var
  VarArray: Variant;
  Value: Variant;

然后创作:

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

或者你也可以

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

取决于数据的类型。然后你像这样迭代:

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

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

最后,当您不再需要它时,清除阵列。编辑:(这是可选的,请参阅In Delphi 2009 do I need to free variant arrays?

VarClear(VarArray);

这就是它的全部。再举一个例子来看看官方Embracadero Help

编辑:

阵列应该只创建一次。然后就像上面的例子中所示使用它。

答案 1 :(得分:7)

另一方面:

(假设Value是Variant参数,元素类型是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;