Я пытаюсь передать массив байтов из 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
Я могу заставить сервер принять олевариант, переданный сценарием, но данные кажутся искаженными, мой пример кода сервера показан ниже и основан на вопросе 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;
Таким образом, идея состоит в том, чтобы принять целые числа, переданные сценарием, преобразовать их в локальное представление данных (массив байтов) и затем передать в моей функции использовать данные.
Я пробовал несколько разных типов данных и методов, чтобы попытаться получить некоторые неопрятные данные из варианта, но все безрезультатно.
Что такое правильный метод извлечения данных массива из переданного варианта?
Кроме того, TVarData (Data) .VArray ^ .Bounds [0] .ElementCount имеет значение ноль, с чего бы это?