20

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

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

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

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

我知道 VarArrayCreate 和 VarArrayLowBound/VarArrayHighBound,但我不确定如何正确执行此操作。

谢谢!

4

2 回答 2

29

你这样创建它:

先声明

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;

最后,当您不再需要它时,您清除数组。编辑:(这是可选的,请参阅在 Delphi 2009 中我需要释放变体数组吗?

VarClear(VarArray);

这就是它的全部。另一个例子请查看官方的Embracadero 帮助

编辑:

数组应该只创建一次。然后就像上面的例子一样使用它。

于 2010-09-01T17:55:31.773 回答
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;  
于 2010-09-01T20:13:46.503 回答