После обновления 4 и 5 мне интересно переоценивать Delphi 2010. На этот раз я намереваюсь портировать часть своего кода (мелкий масштаб), чтобы видеть, как трудный должен сделать это в крупном масштабе.
Основной вопрос, кажется, ASCII к unicode преобразованию. Какие-либо подсказки или ресурсы об этом, что Вы нашли полезными?
Большое спасибо.
Править:
В этой точке моя рекомендация для других людей (которые хотят обновить) была бы:
http://www.embarcadero.com/images/dm/technical-papers/delphi-in-a-unicode-world-updated.pdf
WideString, идентичный для Строкового представления в Delphi 2009
Какова версия компилятора для Delphi 2010?
http://chee-yang.blogspot.com/2008/10/delphi-2009-unicode.html
Обратите внимание что Gif (Melander) и Png (Martijn Saly?) изображения теперь включены в Delphi 2010. Необходимо будет использовать условное выражение для использования правильной единицы GIF:
USES Windows, SysUtils, Graphics, blabla
{$IFDEF VER150}
, GIFImage, {Delphi 7}
{$ELSE}
GIFImg {Delphi 2010}
{$ENDIF};
Также необходимо "зафиксировать" PNG, обеспеченный Причалом: http://talkdelphi.blogspot.com/2009_03_01_archive.html
Другие вещи, которые необходимо знать, состоят в том, что действительно необходимо скопировать проект прежде, чем открыть его в Delphi 2010. 2010 Delphi изменит Ваш файл DFM, даже если Вы не нажмете кнопку Save. Форма потеряет данные, и это не скомпилирует в D7.
ОБНОВЛЕНИЕ
Я наконец обновил. Delphi XE имеет некоторые новые возможности. К сожалению, совсем немногие из них не работают вообще (фоновая компиляция, моделирование UML, кодируйте понимание, например), другие были понижены (справка и например). IDE также не так стабилен и быстр как Delphi 7, и панель инструментов имеет настоящие проблемы (лучше не настраивают IDE). Существует также противная ошибка, где IDE имеет 100%-ю загрузку ЦП (см. мои другие сообщения обо всех этих проблемах). Я надеюсь, что в Обновлении 2 и 3 они устранят некоторые самые строгие проблемы.
Так или иначе я думаю, что обновил слишком скоро, потому что теперь Embarcadero объявил о компиляторе на 64 бита так, вероятно, я должен буду заплатить снова много денег для обновления до следующей версии Delphi для получения того компилятора. Для тех, которые все еще думают для обновления до Delphi XE, который я рекомендовал бы испытать Delphi XE прежде, чем купить его, чтобы видеть, предлагает ли он действительно некоторые функции, которые не доступны иначе.
Заключение:
Мы создали веб-страницу специально для этого выпуска:
http: //www.embarcadero.com / rad-in-action / migration-upgrade-center
Здесь вы можете найти веб-страницы, документы, повторы веб-семинаров и т. д., которые охватывают проблему миграции.
Первое, что люди говорят: «У меня огромная кодовая база, и переход на Unicode займет вечность», и почти без исключения они обнаруживают, что «навсегда» на самом деле гораздо более короткий период времени, чем они думали изначально, и что новый Благодаря особенностям Delphi 2010 оно того стоит.
Самые большие проблемы связаны со сторонними библиотеками и VCL. Если они не на D2010, это может быть болезненно. Проблема Unicode возникает, если вы выполняете вычисления с длиной строк или массивов PChar, предполагая, что один байт на символ. Обычно вы можете обходиться без обработки всего как с AnsiString / AnsiChar в старом стиле. Но тогда вы не получите преимуществ Unicode. Если у вас нет ничего, что было бы сложно сделать в Unicode, просто делайте все в Unicode, и вы будете намного впереди, чем если бы вам пришлось беспокоиться о переключении туда и обратно.
Преобразование кода в Unicode само по себе не занимает много времени, если вы не сделали ничего "смешного" со своими строками. Я преобразовал около 1 млн строк кода + база данных менее чем за 2 недели. Ребята из codegear очень хорошо поработали, сделав это намного проще.
Ваш код может быть перекомпилирован в D2010 без каких-либо изменений (но с большим количеством подсказок / предупреждений).
Самая большая проблема при преобразовании возникает из-за некорректных вызовов API Windows. Например, функция GetComputerName, которая запрашивает размер буфера в TChars (как указано в API). В Ansi TChar = 1 байт, поэтому Length = SizeOf. В Юникоде это уже не так. Хуже того, вызов API может не завершиться неудачей. Он просто перезапишет некоторую действительную часть памяти и выйдет из строя намного позже.
О ... А еще есть небольшие различия между Ansi и Unicode в Windows API. Например, lpCommandLine CreateProcess доступен только для чтения в версии Ansi, но для чтения / записи в версии Unicode. Таким образом, использование константы в качестве параметра отлично работает в Ansi, но приведет к сбою в Kernel32.dll в Unicode.
В целом, это во многом зависит от качества кода, с которым вы работаете. Плохой код может быть очень сложно перенести на D2010. Хороший код должен быть довольно простым.
и прочтите ресурсы, на которые ссылается Ник Ходжес, они очень полезны.
Мы перешли с Delphi 7 на Delphi 2007, 2009 и теперь 2010! Ниже перечислены самые большие проблемы, которые мы обнаружили.
Надеюсь, это поможет.
Что касается проблем с преобразованием Unicode, лучший способ увидеть проблемы, с которыми люди столкнулись, и что сделали другие, - это получить White Paper Кэри Дженсона: Delphi Unicode Migration for Mere Mortals .
Также я настоятельно рекомендую Marco Cantu «Справочник по Delphi 2009» , в котором описаны все изменения в выпуске Major 2009, который включает Unicode, Generics и многое другое. Большая часть его материала по Unicode из этой книги содержится в его Белой книге: Delphi и Unicode .
Я согласен с Крисом - самой большой проблемой при переносе нашего кода на 2010 год было обеспечение работы всех библиотек сторонних производителей. Некоторые из них нуждались в незначительных правках исходного текста, и их приходилось устанавливать из измененного исходного текста. Тем не менее, это заняло не более одного дня или около того.
Единственная другая проблема, с которой мы столкнулись при переходе на 2010, была связана с небольшим участком кода, который стал глючить из-за изменений в работе ProcessMessages в 2010. Это был старый кусок кода, который, вероятно, не стоило писать так, как он был написан изначально (ProcessMessages и Sleep() внутри цикла ожидания изменения переменной OPC). Он работал в 2007 году, но в 2010 году он каким-то образом пожирал системные сообщения и блокировал OPC-сервер. Для нас это было небольшим исправлением, но, как сказал Кен, это, вероятно, зависит от качества кода, который вы переносите. 2010 кажется немного менее терпимым к плохой практике и уродливым хакам.