Следует проанализировать использование функции Move при работе со строками или символьными массивами. Рассмотрим следующий код: var Count: Integer; Buf1, Buf2: array[0..255] of Char; begin // Существующий код - неправильный, потому что string = UnicodeString Count := Length(Buf1); Move(Buf1, Buf2, Count); // Правильный код для Юникода Count := SizeOf(Buf1); // <<-- Задание размера буфера в байтах Count := Length(Buf1) * SizeOf(Char); // <<-- Задание размера буфера в байтах Move(Buf1, Buf2, Count); end;
Length возвращает размер в символах, но Move ожидает, что Count будет в байтах. В этом случае вместо Length нужно использовать SizeOf (или нужно умножить Length на размер Char).