Основное изменение в будующей версии дельфи - глобальный переход на юникод.
Итак, что же изменится в языке:
Появляется новый строковой тип UnicodeString. Данный тип является строковым типом со счётчиком ссылок, как и AnsiString. То есть, если в программе нет ссылок на строку, память автоматически освобождается.
Кодировка UnicodeString - UTF-16
Тип string, который в данный момент является AnsiString, станет UnicodeString.
Типы Char и PChar, которые на данный момент соответствуют AnsiChar и PAnsiChar, теперь будут соответствовать WideChar и PWideChar соответственно.
Соответственно все заголовочные файлы для работы с WinAPI будут изменены под юникод. На данный момент все функции соответствуют A функциям Windows. Например MessageBox соответствует MessageBoxA. Теперь будет соответствовать MessageBoxW.
Старые типы данных также можно будет использовать, но потребуется явное указание типа.
Многие знают, что Windows 98 не является unicode системой. То есть юникод там эмулируется. В Windows 2000 и выше эмулируется Ansi, а сама система является unicode. Тем не мение, если Вам требуется, чтобы Ваши программы работали и под Windows 98 - тут нет никаких ограничений. Слухи о том, что программы, написанные на юникодной дельфи, не будут работать в 9х системах, неверны.
Новый класс TEncoding, предназначенный для конвертации текста в разные кодировки.
TStrings.LoadFromFile теперь автоматически определяет кодировку текста и производит его перекодировку в UTF-16 (UnicodeString), используя TEncoding.
Теперь о переносе старых программ на новую версию дельфи.
В основном никаких трудностей не возникнет. Но есть ряд моментов, которые необходимо будет отследить и откорректировать:
Размер символа. Если вы выделяете память под символы, обращаетесь к символам в памяти, то следует помнить, что размер символа не 1 байт, а SizeOf(Char)
Использование string, как хранилища для несимвольных данных. Довольно частый приём. В таких местах советую явно указать не string, а AnsiString.
Если в качестве буфера данных вы используете array of char, то стоит помнить, что SizeOf(Buffer) <> Length(Buffer)
Если где-то ваш код не получается подстроить к новому типу строк, то укажите явно старые типы (AnsiChar, PAnsiChar, AnsiString).
В основном серъёзных изменений в программу вносить не придётся, т.к. подобных мест обычно немного. Все подобные моменты относятся только к нестандартному использованию строковых типов.
Просмотрите Ваш код. Отслеживайте эти моменты уже сейчас, и сможете гибко собирать как анси, так и юникод версию программ.
Особенно это относится к авторам компонент.