Является ли обновление D2010 действительно значимым - PullRequest
3 голосов
/ 02 декабря 2009

Я пытаюсь перенести свои собственные проекты в delphi 2010. Но это кажется очень сложным.

  1. Я использую TntControls для старых проектов. Если я удалю эту библиотеку, некоторые функции времени выполнения должны быть заново реализованы мной. Например: преобразовать UnicodeString в указанную кодовую страницу.
  2. "SizeOf", "Length", FillChar () все еще смущают меня. Компилятор выдаст предупреждение, если SizeOf () следует заменить на Length (). Но я не нашел ни одного безопасного для идиота учебника для меня.
  3. Непонятное предупреждение при попытке привести AnsiString к UnicodeString. Этот разговор не приведет к потере данных, не так ли?
  4. Многие коды (почтовые индексы, строковые утилиты и т. Д.) Должны быть проверены повторно.

Слишком много головной боли ... Может кто-нибудь поделиться опытом по переносу существующего проекта с очень старого Delphi на Delphi 2010?

Ответы [ 2 ]

13 голосов
/ 02 декабря 2009
  1. преобразование строки Unicode в указанную кодовую страницу только с Delphi: проще, чем когда-либо. Благодаря возможности класса String создавать строку нужной кодовой страницы и безошибочно преобразовывать ее из одной кодовой страницы в другую.
  2. FillChar - это байты, а не символы, имя теперь неудачное. Не то чтобы это сбивало с толку.
  3. Это предупреждение заставляет вас думать, что оно и сделало. Работа выполнена.
  4. О да. Но это повторное тестирование и перечитывание было самым большим преимуществом для меня.

Я перенес все свои проекты в Delphi 2009/2010 и обнаружил следующие преимущества:

A. тщательное перечитывание моего кода принесло много способов, которые мне понадобились, чтобы очистить его (потому что это раздутая старая масса аварий и добавочный кодовый шлам, как в большинстве случаев заканчиваются проектами RAD / delphi), немногие из которых являются чисто юникодовыми или портами связанные, но все это сделало продукты лучше, чтобы быть вынужденным через изменения.

B. более чистый мир с меньшим количеством сторонних компонентов. Отказ от TNT, а также от дюжины или двух сторонних компонентов сделают ваш проект меньше, более ортогональным и более простым в поддержке.

C. Там нет причин в портировании, чтобы сделать это в одну сторону. На самом деле ни один из моих портов проекта не «постоянно» перемещен в Delphi 2009/2010. Все они прекрасно строятся в обоих мирах. Я широко использую тип UnicodeString во всем своем коде, где бы он мне ни понадобился, и делаю typedef для WideString при компиляции в Delphi 2007 или более ранних версиях.

D. Delphi 2010 ide прекрасно работает на Windows Vista и Windows 7, и с ним приятно работать. Delphi 2009 и 2010 не терпят крах, что часто делают Delphi 2007 и Delphi 7 для меня.

Если вам не нужна поддержка Vista и Win7, и вы на 100% довольны и запускаете компоненты TNT без сбоев, а ваше приложение не приносит вам денег, оставьте его там, где оно есть. Если это приносит вам деньги, потратьте свое время, и вы скоро увидите награды. Delphi 2010 и 2009, безусловно, являются лучшими версиями delphi, и единственная серьезная головная боль, которая остается, заключается в том, что документация остается ниже качества Delphi 7 с тех пор, как они удалили файлы справки формата WinHelp.

8 голосов
/ 02 декабря 2009
  1. Если вы используете Tnt и уже конвертируете между кодовыми страницами, то да, переход на Delphi 2010 потребует от вас дополнительной работы, поскольку вам нужно удалить код для вещей что Delphi теперь обрабатывает по своей сути. В конечном счете, ваш код будет проще, но в то же время его будет сложно доставить.

  2. SizeOf, Length и FillChar - это базовые концепции, которые вы, как профессиональный разработчик программного обеспечения, должны понять сами. Знайте, имеете ли вы дело с символьными или не символьными данными, и при работе с последними не используйте типы, связанные с символами. У вас есть TBytes; используй это. Не используйте строки в качестве байтовых буферов. Если вы хотите узнать, сколько у вас байтов, используйте SizeOf; когда вы хотите узнать, сколько у вас «вещей», используйте Length. Вообще избегайте FillChar; вам, вероятно, все равно это не нужно, так как вы используете его сегодня. Так как «char», которым заполнены объекты, почти всегда равен нулю, вы можете вместо этого использовать ZeroMemory. Он имеет меньше параметров и работает так же быстро, как и FillChar, тем более что Delphi поддерживает функцию встраивания.

  3. Компилятор предупреждает вас при преобразовании из AnsiString в UnicodeString, потому что это не простое присвоение строки, а преобразование, гарантированно выделяющее больше памяти и копирующее все по одному символу за раз. Это предупреждение о производительности, а не предупреждение о потере данных. Преобразования в обратном направлении оба (даже при назначении Utf8String, которая технически никогда не потеряет данные из UnicodeString, если она заполнена только допустимыми символами Unicode). Лучший способ избежать предупреждения - не использовать AnsiString. Используйте старую старую строку, за исключением кода, который действительно должен знать, какую кодовую страницу кодировать, как.

  4. Я не думаю, что аргумент "повторного тестирования" очень силен. В коде библиотеки особенно должны быть модульные тесты, которые вы выполняли при каждой перекомпиляции. Повторное тестирование - это то, что вы делаете несколько раз в день; никаких особых усилий не требуется, если что-то идет не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...