Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在Delphi中使用变量数组_Arrays_Delphi_Automation_Delphi 7_Variant - Fatal编程技术网

Arrays 如何在Delphi中使用变量数组

Arrays 如何在Delphi中使用变量数组,arrays,delphi,automation,delphi-7,variant,Arrays,Delphi,Automation,Delphi 7,Variant,我有两个Delphi7程序:一个COM自动化服务器(EXE)和另一个使用自动化服务器的程序 我需要将字节数组从一个程序传递到另一个程序 经过一番搜索,我发现使用变体数组是一种可行的方法(如果您知道任何更好的方法,请纠正我) 我的问题是: 如何在一个程序中创建变量数组,然后如何在另一个程序中读取其值 我知道VarArrayCreate和VarArrayLowBound/VarArrayHighBound,但我不确定如何正确执行 谢谢 您可以这样创建它: 首先声明 var VarArray: V

我有两个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;
这就是全部。再举一个例子,看看这位官员

编辑:

数组只能创建一次。然后像上面的例子一样使用它。

对于另一侧:

(假设值为变量参数,元素类型为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;