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帮助
编辑:
该阵列只应创建一次.然后就像上面的例子中所示使用它.
另一方面:
(假设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)