如果我有一个只包含简单类型的变量数组,以及可能的其他简单类型的变体数组,我是否需要做任何明确的事情来释放内存,或者它是否都由我来处理.我一直认为没什么可做的,但我只是有点怀疑!
我试图将字节数组从 VBscript 传递到我的 Windows Delphi 应用程序,但似乎找不到正确的语法来解释传递的数据。
要求相当简单,如下面的 VBscript 片段所示
Dim inst,arr(5)
Sub Main
set inst=instruments.Find("EP1")
arr(0) = 0
arr(1) = 1
arr(2) = 2
arr(3) = 3
arr(4) = 4
inst.writebytes arr,5
end Sub
Run Code Online (Sandbox Code Playgroud)
我可以让服务器接受脚本传递的 olevariant 但数据似乎是乱码,我的示例服务器代码如下所示,并且基于此处的 Stackoverflow 问题如何在 Delphi 中使用变体数组
procedure TInstrument.WriteBytes(Data: OleVariant; Length: Integer);
var i,n:integer; Pdat:Pbyte; Adata:PvarArray;
begin
if VarIsArray(data) then
begin
n:=TVarData(Data).VArray^.Bounds[0].ElementCount;
Adata:= VarArrayLock(Data);
Getmem(Pdat,length);
try
for i:=0 to length-1 do
Pdat[i]:=integerArray(Adata.data^)[i];
Finstrument.WriteBytes(Pdat,Length);
finally
freemem(Pdat)
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
所以这个想法是接受脚本传递的整数,将其转换为本地数据表示(字节数组),然后将其传递给我的函数以使用数据。
我尝试了几种不同的数据类型和方法,试图从变体中获取一些无乱码的数据,但都无济于事。
从传递的变体中提取数组数据的正确方法是什么?
另外, TVarData(Data).VArray^.Bounds[0].ElementCount 的值为零,为什么会这样?
这是使用一个变体阵列(像示出之间的差异在这里),而不是一个通用动态数组?