Любые подсказки для тех, кто хочет перейти с Delphi 7 (и вниз) на Delphi 2010?

После обновления 4 и 5 мне интересно переоценить Delphi 2010. На этот раз я собираюсь перенести часть своего кода (небольшого масштаба), чтобы увидеть, насколько сложно это сделать в большом масштабе.

Кажется, основной проблемой является преобразование ascii в unicode. Какие-либо советы или ресурсы по этому поводу, которые вы нашли полезными?

Большое спасибо.


Редактировать:

На данный момент моя рекомендация для других людей (которые хотят обновить) будет:

http://www.embarcadero.com/images/dm/technical-papers/delphi-in-a-unicode-world-updated.pdf

Является ли WideString идентичным String в 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, предоставленный Embarcadero: http://talkdelphi.blogspot.com/2009_03_01_archive.html

Другие вещи, которые вам нужно знать, это то, что вам действительно нужно сделать резервную копию вашего проекта, прежде чем открывать его в Delphi 2010. Delphi 2010 изменит ваш файл DFM, даже если вы не нажмете кнопку Сохранить. Форма потеряет данные и не будет компилироваться в D7.


ОБНОВИТЬ

Я наконец обновился. Delphi XE имеет некоторые новые функции. К сожалению, довольно немногие из них вообще не работают (фоновая компиляция, UML-моделирование, понимание кода, например), другие были понижены (помощь и, например). Среда IDE также не такая стабильная и быстрая, как Delphi 7, и на панели инструментов есть реальные проблемы (лучше не настраивайте IDE). Существует также неприятная ошибка, при которой среда IDE использует процессор на 100% (см. Мои другие сообщения обо всех этих проблемах). Я надеюсь, что в обновлениях 2 и 3 они исправят некоторые из самых жестких проблем.

В любом случае, я думаю, что я обновил слишком рано, потому что теперь Embarcadero анонсировал 64-битный компилятор, поэтому, вероятно, мне придется заплатить много денег, чтобы перейти на следующую версию Delphi, чтобы получить этот компилятор. Для тех, кто все еще думает перейти на Delphi XE, я бы порекомендовал попробовать Delphi XE перед покупкой, чтобы увидеть, действительно ли он предлагает некоторые функции, которые в противном случае недоступны.

Заключение:

  • Delphi XE предлагает множество новых функций, но, очевидно, вы не будете использовать ВСЕ из них.
  • Стабильность IDE не лучше.
  • Это помогает вам создавать более современные приложения (современный интерфейс открытия/сохранения пользовательского интерфейса, манифест приложения).
  • Поддержка юникода.

Ответы

Ответ 1

Мы создали веб-страницу специально для этой самой проблемы:

http://www.embarcadero.com/rad-in-action/migration-upgrade-center

Здесь вы можете найти веб-страницы, документы, повторы веб-семинаров и т.д., которые охватывают проблему миграции.

Первое, что люди говорят: "У меня огромная база кода, и переход на Unicode займет навсегда", и почти без исключения они обнаруживают, что "навсегда" действительно намного короче, чем они изначально думали, и что новый функции Delphi 2010 делают все это достойным.

Ответ 2

Самые большие проблемы связаны с сторонними библиотеками и VCL. Если они не на D2010, это может быть болезненно. Проблема Unicode возникает, если вы выполняете вычисления с длиной строк или массивами PChar, предполагая один байт на символ. Вы, как правило, избегаете рассмотрения всего, как старого AnsiString/AnsiChar. Но тогда вы не получаете преимущества Unicode. Если у вас нет ничего, что было бы трудно сделать в Юникоде, просто сделайте все в Юникоде, и вы будете намного дальше, чем если бы вам пришлось беспокоиться о переходе туда и обратно.

Ответ 3

Преобразование кода в unicode не займет столько времени, пока вы ничего не делаете "смешно" со своими строками. Я преобразовал около 1 м строк кода + базу данных менее чем за 2 недели. Ребята из codegear сделали очень хорошую работу, сделав это намного проще.

Ваш код может перекомпилировать в D2010 без каких-либо изменений (но с довольно большим количеством подсказок/предупреждений).

Худшая проблема при конверсии происходит от вызовов API Window, которые были неправильно выполнены. Например, функция GetComputerName, которая запрашивает размер буфера в TChars (как указано в API). В Ansi, TChar = 1 байт, поэтому Length = SizeOf. В Unicode это не так. Хуже того, вызов API может не сработать. Он просто перезапишет некоторую действительную часть памяти и сработает чуть позже.

О... И есть и те незначительные различия между Ansi и Unicode в Windows API. Например, lpCommandLine для CreateProcess доступен только для чтения в версии Ansi, но читает/записывает в версии Unicode. Таким образом, использование константы в качестве параметра отлично работало в Ansi, но сбой в Kernel32.dll в Юникоде.

В целом, это зависит от качества кода, с которым вы работаете. Плохой код может быть очень трудным для порта D2010. Хороший код должен быть довольно простым.

и прочитайте ресурсы, с которыми связан Ник Ходжес, они очень полезны.

Ответ 4

Для проблем конвертации Unicode лучше всего увидеть проблемы, с которыми столкнулись люди и что сделали другие, - это получить Cary Jenson White Paper: Delphi Unicode Migration для простых смертных.

Также я настоятельно рекомендую Marco Cantu "Delphi 2009 Handbook" , в котором описываются все изменения в выпуске Major 2009, включающие Unicode и Дженерики и многое другое. Большая часть его материала Юникода из этой книги находится в его Белой книге: Delphi и Unicode.

Ответ 5

Мы обновили Delphi 7 через Delphi 2007, 2009 и сейчас 2010! Ниже перечислены самые большие проблемы, которые мы нашли.

  • Темы изменились, при этом Resume и Suspend устарели.
  • Unicode
  • Структура проектов изменилась и не поддерживает обратную совместимость.
  • Структура dfms изменилась и не поддерживает обратную совместимость.

Надеюсь, что это поможет.

Ответ 6

Я согласен с Крисом - самая большая проблема при переносе нашего кода на 2010 год заключалась в том, чтобы работать со всеми сторонними библиотеками. Некоторые из них нуждались в незначительных исходных изменениях здесь и там и должны были быть установлены из измененного источника. Тем не менее, он сказал, что это не более чем на день или около того, чтобы разобраться в деталях.

Единственная проблема, с которой мы столкнулись в 2010 году, связана с одним небольшим фрагментом кода, который пошатнулся из-за изменения способа работы ProcessMessages 2010 года. Это был старый фрагмент кода, который, вероятно, не должен был быть написан так, как он начинал (ProcessMessages и Sleep() внутри цикла while, ожидающего изменения переменной OPC). Он работал в 2007 году, но в 2010 году он как-то пожирал системные сообщения и блокировал OPC-сервер. Для нас это было небольшое исправление, но, как сказал Кен, он, скорее всего, будет зависеть от качества кода, который вы переносите. 2010 год кажется немного менее терпимым к плохой практике и уродливым взломам.

Ответ 7

Посмотрите этот веб-семинар Embarcadero о том, как перейти с более старых выпусков Delphi, с некоторыми историями о том, что искать и как обновить ваш код (включая инструменты и ресурсы, которые помогут вам в этом), по этой ссылке: https://community. embarcadero.com/blogs/entry/migrating-delphi-case-studies