我有两个 Delphi7 程序:一个 COM 自动化服务器 (EXE) 和另一个正在使用自动化服务器的程序。
我需要将一个字节数组从一个程序传递到另一个程序。
经过一番搜索,我发现使用变体数组是可行的方法(如果您知道更好的方法,请纠正我)。
我的问题是:如何在一个程序中创建一个变量数组,然后如何在另一个程序中读取它的值?
我知道 VarArrayCreate 和 VarArrayLowBound/VarArrayHighBound,但我不确定如何正确执行此操作。
谢谢!
我有两个 Delphi7 程序:一个 COM 自动化服务器 (EXE) 和另一个正在使用自动化服务器的程序。
我需要将一个字节数组从一个程序传递到另一个程序。
经过一番搜索,我发现使用变体数组是可行的方法(如果您知道更好的方法,请纠正我)。
我的问题是:如何在一个程序中创建一个变量数组,然后如何在另一个程序中读取它的值?
我知道 VarArrayCreate 和 VarArrayLowBound/VarArrayHighBound,但我不确定如何正确执行此操作。
谢谢!
你这样创建它:
先声明
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 帮助
编辑:
数组应该只创建一次。然后就像上面的例子一样使用它。
对于另一边:
(假设 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;