How to interpret arrays passed from VBscript to a Delphi COM server App
I am trying to pass an array of bytes from VBscript to my windows Delphi Application and can't seem to find the correct syntax to interpret the passed data.
The requirement is fairly simple as the VBscript snippet below demonstrates
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
I can get the server to accept the olevariant passed by the script but the data seems garbled, my example server code is shown below and is based on the Stackoverflow question here How to use variant arrays in 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.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;
So the idea is to accept the integers passed by the script, convert it to the local data representation (array of byte) then pass it on to my function to use the data.
I have tried several different data types and methods to try and get some ungarbled data out of the variant all to no avail.
What is the correct method of extracting the array data from the passed variant?
Also, TVarData(Data).VArray^.Bounds.ElementCount has a value of zero, why would that be?