Использование AnsiString как байта массива в Delphi XE4
Пытаясь переместитьDelphi 2007
проект дляXE4
, ВDelphi 2007
Я использовал функцию, которая читает байтовый массив из сокета, используяIndy
непосредственно. Я прошелAnsiString
приведен к массиву байтов в параметре var этой функции:
var data:AnsiString;
AContext.Connection.IOHandler.ReadBytes(TIDBytes(Data), PacketLength-PacketLengthDelta-1, False);
ВDlphi XE
когда я пытаюсь конкатенироватьData
в другую строку я получилaccess violation
ошибка.
Теперь я пытаюсь смоделировать эту проблему в более простом коде:
TIdBytes = array of Byte;
procedure fill(var b: TIDBytes);
begin
setlength(b,5);
b[0]:=61;
b[1]:=61;
b[2]:=61;
b[3]:=61;
b[4]:=61;
//original function used move function
end;
procedure TMainForm.FormCreate(Sender: TObject);
var s: ansistring ;
begin
fill( TIDBytes(s) );
Showmessage(s);
end;
Теперь я ожидаю увидеть что-то вроде====
в окне сообщения, но я получил пустой. Я предположил, что XE AnsiString действует так же, как Delphi 2007 Ansistring, и вы можете использовать их как байтовый массив в обоих случаях.
Каков наилучший способ решить проблему заполнения AnsiString байтами?