Arrays 如何在Delphi中使用变量数组
我有两个Delphi7程序:一个COM自动化服务器(EXE)和另一个使用自动化服务器的程序 我需要将字节数组从一个程序传递到另一个程序 经过一番搜索,我发现使用变体数组是一种可行的方法(如果您知道任何更好的方法,请纠正我) 我的问题是: 如何在一个程序中创建变量数组,然后如何在另一个程序中读取其值 我知道VarArrayCreate和VarArrayLowBound/VarArrayHighBound,但我不确定如何正确执行Arrays 如何在Delphi中使用变量数组,arrays,delphi,automation,delphi-7,variant,Arrays,Delphi,Automation,Delphi 7,Variant,我有两个Delphi7程序:一个COM自动化服务器(EXE)和另一个使用自动化服务器的程序 我需要将字节数组从一个程序传递到另一个程序 经过一番搜索,我发现使用变体数组是一种可行的方法(如果您知道任何更好的方法,请纠正我) 我的问题是: 如何在一个程序中创建变量数组,然后如何在另一个程序中读取其值 我知道VarArrayCreate和VarArrayLowBound/VarArrayHighBound,但我不确定如何正确执行 谢谢 您可以这样创建它: 首先声明 var VarArray: V
谢谢 您可以这样创建它: 首先声明
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;
这就是全部。再举一个例子,看看这位官员
编辑:
数组只能创建一次。然后像上面的例子一样使用它。对于另一侧:
(假设值为变量参数,元素类型为WideString)
谢谢您还可以给出一些示例代码,说明如何在客户端读取数组?假设vararray以变量形式传递给客户机,您如何读取它?您是调用VarArrayCreate还是仅使用VarArrayLowBound等?仅使用另一侧的数组。只创建一次。但要注意谁负责清理。清理和释放不是一回事。千万不要说这是一回事。我还提供了一个解释引用计数性质的URL。瓦拉洛克是做什么的?顺便说一句,我使用的是字节数组。PWideStringArray是在哪里定义的?还有PByte阵列吗?谢谢PWideStringArray是一种自定义类型,顾名思义,是指向WideString数组的指针。您可以在SysUtils中找到PByteArray。VarArrayLock锁定数组并返回指向包含该数组的内存的指针,以便更快地访问。由于有不同的进程在摆弄这个数组,我建议使用这个功能。您可以在D7帮助中查找更多信息。
VarClear(VarArray);
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;