Delphi 2009. Ну что сказать?

Первое впечатление очень хорошое. Разве что help, пришлось ставить отдельно.
Всё загрузилось, явных косяков не вылезло в IDE.
Печатаю What`s new и Enabling applications for Unicode. Просматриваю – засад не вижу.

Надо заметить, я со времён введения huge string всегда писал AnsiString, вместо String. Что бы как можно меньше зависить от опций компилятора. Таким образом, я особо не пугался что мне придётся что-то менять. Смущало что на конференции, как-то немного странно говорили, что “работать должно”.
Радовало и то, что добавили warnings на юникод, а учитывая что я добиваюсь, что бы при компиляции не было варнингов в проектах, это для меня очень удобная штука для дальнейшего анализа не понравившихся компилятору кусков текста.

Итак, первая ж компиляция приносит свои плоды, точнее более 500 warnings и более 50 errors.
Разбор полётов:

  • Просто перейти не получится, реальные проекты необходимо переделывать!
  • Ошибки оказались на то, что я при вызове API функций параметры AnsiString приводил к PChar, хотя требовалось к PAnsiChar. Это мелочь, казалось бы, если бы тут же не возникающая ошибка на параметр функции, ведь там ожидают увидеть параметр типа PWideChar, а не однобайтную переменную. Решается тем, что меняется вызов unicode функции на функцию однобайтную, то бишь CreateFile на CreateFileA.
  • не все функции по работе со строками имеют “перегружены” аналогами для работы с однобайтными строками. Отсутствует Trim, например. Но это решаемо написанием отдельного модуля с реализацией необходимых функций для однобайтных строк
  • и наконец то, что не даёт просто перекомпилировать тексты без изменений, это то, что TStringList может работать только с UnicodeString. Т.е. если для внутренней логики мне требуется хранить кучу однобайтных строк и я воспользуюсь TStringList, мало того, что я получу кучу предупреждений о implicit преобразованиях, так еще и на каждый “чих” будут производиться преобразования unicode-ansi. Может быть они ничего и не испортят, но такое точно будет медленнее.

В общем, попа. А так же рекомендую почитать отстальные грамотно сделанные переводы.

Поубивав-бы:

[DCC Hint] anonim.dpr(21): H2164 Variable ‘хня_всякая’ is declared but never used in ‘anonim’

ну что мешало ограничить идентификаторы латиницей? :)

Leave a Reply