Использование 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 байтами?

Ответы на вопрос(2)

Ваш ответ на вопрос