Ошибка здесь
registryData: array of UCHAR;
Здесь вам не нужен динамический массив.
Обновлен:
Я предполагаю, что
UCHAR registryData[];
- это хак C для создания поля нулевой длины в конце структуры. Эквивалентный взлом Delphi -
registryData: record end;
чтобы получить доступ к этому фиктивному полю как к массиву в Delphi, вы должны набрать:
type
PByteArr = ^TByteArr;
TByteArr = array[0..$FFFF] of Byte;
PRec = ^TRec;
TRec = packed record
Data: Integer;
MoreData: record end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
P: PRec;
PMoreData: PByteArr;
begin
P:= AllocMem(SizeOf(TRec) + 4);
PMoreData:= @P^.MoreData;
PMoreData^[2]:= 3;
ShowMessage(IntToStr(PMoreData^[2]));
FreeMem(P);
end;
но, вероятно, вам нужно типизировать это фиктивное поле к чему-то другому, поскольку определение поля - просто взлом.
И наконец: Никогда не используйте динамические массивы Delphi (например, registryData: массив UCHAR;) при преобразовании структур C в Delphi . Динамический массив в Delphi - это управляемый на протяжении жизни ссылочный тип, который не имеет точного эквивалента в C.