Разница - это деталь, связанная с сигнатурой метода .ReadBuffer.
Подпись:
procedure ReadBuffer(var Buffer; Count: Longint);
Как видите, параметр Buffer не имеет типа. В этом случае вы говорите, что хотите получить доступ к базовой переменной.
Однако строка состоит из двух частей: указателя (содержимое переменной) и строки (переменная указывает на это).
Таким образом, если бы для ReadBuffer была задана только строковая переменная, у него было бы 4 байта для хранения данных, строковая переменная, и это не сработало бы слишком хорошо, поскольку строковая переменная должна содержать указатель, а не просто какой-либо случайные двоичные данные. Если бы ReadBuffer записал более 4 байтов, он перезаписал бы что-то еще в памяти новыми данными, что могло бы привести к катастрофическим последствиям.
Передавая символ [1] параметру var
, вы предоставляете ReadBuffer доступ к данным, на которые указывает строковая переменная, что вам и нужно. Вы хотите изменить строку content в конце концов.
Кроме того, убедитесь, что вы установили длину строковой переменной достаточно большой, чтобы вместить в нее все, что вы читаете.
Кроме того, последнее замечание, которое я не могу проверить. В более старых версиях Delphi строковая переменная содержала 1-байтовые символы. В более новом, я думаю, что они два из-за Unicode, так что код может работать не так, как ожидалось в новых версиях Delphi. Вы, вероятно, хотели бы использовать вместо этого байтовый массив или кучную память.