我有两个Delphi7程序:一个COM自动化服务器(EXE)和另一个使用自动化服务器的程序。
我需要将一个字节数组从一个程序传递给另一个程序。
经过一番搜索,我发现使用变体数组是可行的方法(如果你知道更好的方法,请纠正我。)
我的问题是: 如何在一个程序中创建变量数组,然后如何在另一个程序中读取它的值?
我了解VarArrayCreate和VarArrayLowBound / VarArrayHighBound,但我不确定如何正确地做到这一点。
谢谢!
答案 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;