О юникоде в будующих версиях Delphi
Написал Snowy   
10.01.2008
Основное изменение в будующей версии дельфи - глобальный переход на юникод.
Итак, что же изменится в языке:
  • Появляется новый строковой тип 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).
В основном серъёзных изменений в программу вносить не придётся, т.к. подобных мест обычно немного. Все подобные моменты относятся только к нестандартному использованию строковых типов.
Просмотрите Ваш код. Отслеживайте эти моменты уже сейчас, и сможете гибко собирать как анси, так и юникод версию программ.
Особенно это относится к авторам компонент.
опубликовано
Добавить новыйПоиск
Добавить комментарий
Имя:
Веб-сайт:
Заголовок:
UBB-Код:
[b] [i] [u] [url] [quote] [code] [img] 
 
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
 
Security Image
Пожалуйста, введите проверочный код, который Вы видите на картинке.