How to use variant arrays in Delphi

匿名 (未验证) 提交于 2019-12-03 02:06:01

问题:

I have two Delphi7 programs: a COM automation server (EXE) and the other program which is using the automation server.

I need to pass an array of bytes from one program to the other.

After some searching I've found that using variant arrays is the way to go (correct me please if you know any better methods).

My question is: How do I create a variant array in one program, and then how do I read its values in the other?

I know about VarArrayCreate and VarArrayLowBound/VarArrayHighBound, but I'm unsure on how to do this properly.

Thanks!

回答1:

You create it like that:

Declarations first

var   VarArray: Variant;   Value: Variant;

Then the creation:

VarArray := VarArrayCreate([0, Length - 1], varVariant);

or you could also have

VarArray := VarArrayCreate([0, Length - 1], varInteger);

Depends on the type of the data. Then you iterate like this:

i := VarArrayLowBound(VarArray, 1); HighBound := VarArrayHighBound(VarArray, 1);  while i <= HighBound do begin   Value := VarArray[i];   ... do something ...   Inc(i); end;

Finally you clear the array when you don't need it anymore. EDIT: (This is optional, see In Delphi 2009 do I need to free variant arrays? )

VarClear(VarArray);

That is all there is to it. For another example look at the official Embracadero Help

EDIT:

The array should be created only once. Then just use it like shown in the above example.



回答2:

For the other side:

(assuming Value is the Variant parameter and the element type is 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;  


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!