如何在Delphi中使用变量数组

Ste*_*eve 19 arrays delphi automation delphi-7 variant

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

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

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

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

我知道VarArrayCreate和VarArrayLowBound/VarArrayHighBound,但我不确定如何正确地做到这一点.

谢谢!

Run*_*ner 28

你这样创建它:

首先是声明

var
  VarArray: Variant;
  Value: Variant;
Run Code Online (Sandbox Code Playgroud)

然后创作:

VarArray := VarArrayCreate([0, Length - 1], varVariant);
Run Code Online (Sandbox Code Playgroud)

或者你也可以

VarArray := VarArrayCreate([0, Length - 1], varInteger);
Run Code Online (Sandbox Code Playgroud)

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

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

while i <= HighBound do
begin
  Value := VarArray[i];
  ... do something ...
  Inc(i);
end;
Run Code Online (Sandbox Code Playgroud)

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

VarClear(VarArray);
Run Code Online (Sandbox Code Playgroud)

这就是它的全部.再举一个例子来看官方的Embracadero帮助

编辑:

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


Uwe*_*abe 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;  
Run Code Online (Sandbox Code Playgroud)

  • PWideStringArray是一个自定义类型,顾名思义,是一个指向WideStrings数组的指针.你可以在SysUtils中找到PByteArray.VarArrayLock锁定数组并返回指向包含数组的内存的指针,以便更快地访问.由于你有不同的过程摆弄这个数组,我建议使用这个功能.您可以在D7帮助中查找更多信息. (2认同)