Насколько сложно перенести проект с Delphi 7 на Delphi XE? - PullRequest
34 голосов
/ 17 апреля 2011

У нашей компании есть программное обеспечение, которое разрабатывалось более 10 лет, поэтому там есть кое-что действительно устаревшее. Это все еще довольно функционально и все такое, но я вижу новые функции в Delphi XE, и это заставляет меня хотеть переключаться. Проблема в том, что сам исходный код содержит более 300 МБ файлов .pas (всего 1 ГБ с компонентами и т. Д.).

Мы используем пользовательские компоненты, старый jvcl и новейшую версию devexpress.

Насколько трудно ожидать, что все будет, если я решу перейти с Delphi 7 на Delphi XE?

Спасибо.

Ответы [ 6 ]

29 голосов
/ 17 апреля 2011

Единственная реальная проблема - это преобразование в Unicode. Вы должны узнать, как реализована поддержка Unicode в Delphi - начните с Marco Cantu Технический документ: Delphi и Unicode

Невозможно оценить объем работы, необходимый для обновления старых приложений до Unicode, не зная фактического кода. Если бы вы использовали строковые типы стандартным способом, преобразование было бы простым. Любые низкоуровневые трюки со строковыми типами (например, хранение двоичных данных в строках) теперь не рекомендуется, и соответствующий код следует переписать.

15 голосов
/ 17 апреля 2011

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

Однако, если ваша кодовая база настолько велика, как вы объясняете, вы не должны полностью полагаться на то, что вам скажет кто-то здесь. Просто получите копию XE и загрузите код. Посмотрите, с какими проблемами вы столкнетесь, чтобы почувствовать, сколько усилий потребуется на это.

На данный момент я перенес весь свой код в XE (даже старые проекты). Я повторно использую одни и те же библиотеки в максимально возможной степени, поэтому после преобразования большинства из них «перенос» приложений с Delphi 7 на Unicode Delphi обычно представлял собой просто повторяющуюся задачу - иметь дело с обновленными интерфейсами в библиотеках или исправление ошибок и предупреждений компилятора.

Наиболее распространенные ошибки, с которыми я столкнулся:

  • Unicode материал. Это займет 90% времени. Это раздражает, если код выполняет много низкоуровневой обработки строк, но большинство проблем можно легко исправить, добавив несколько типов типов.

  • компилятор ругается при использовании c in ['a'..'z']. Вы должны использовать CharInSet() для строк Unicode.

  • Если вы установите ShortDateFormat, вы получите предупреждение компилятора о том, что вы должны использовать FormatSettings.ShortDateFormat. В новом коде это хорошая идея. Если вы портируете, просто проигнорируйте его изначально, если вы просто хотите начать.

Кроме того, вы, вероятно, обновите сторонние библиотеки до более новых версий, чтобы вам не приходилось переносить их самостоятельно. Для тех, кто часто меняет свои интерфейсы или работу, не редкость, поэтому я бы скачал несколько пробных версий, чтобы увидеть, что было изменено.

6 голосов
/ 17 апреля 2011

Я делал довольно много таких преобразований.

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

Тогда вы должны планировать большую часть: преобразование Unicode как для вашего приложения, так и для вашей базы данных.

Наконец, есть менее важные, но потенциально очень трудоемкие аспекты:

  • если вы используете BDE, самое время избавиться от него
  • Delphi XE более строг, чем Delphi 7
  • Версии сторонних библиотек, которые содержат довольно много версий и обычно гораздо менее обратно совместимы, чем VCL

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

6 голосов
/ 17 апреля 2011

Вы упомянули SQL в одном из ваших комментариев к комментариям ... Поддерживает ли ваша база данных Unicode?Если нет, вы могли бы быть много работы.Возможно, вам придется конвертировать базы данных на лету или создать инструмент конвертации для ваших пользователей.Вам может потребоваться обновить базу данных или даже переключиться на что-то другое.Например, DBISAM не поддерживает Unicode, но производитель делает ElevateDB, который есть.Переход не тривиален.И некоторые другие библиотеки, такие как Hyperstring, написанные в основном на ассемблере, являются еще одним больным местом.

5 голосов
/ 17 апреля 2011

Мой проект содержит около миллиона строк кода, и я недавно перенес его с CB9 на XE.Чтобы сократить объем работы, я сначала много переписал, чтобы больше не зависеть от сторонних пакетов компонентов, затем тщательно перебрал все связанные со строками (юникод) и только потом перешел на XE.Подготовка была большой работой, фактический порт был относительно легким.

0 голосов
/ 11 марта 2013

Это определенно вызов для этой МИГРАЦИИ.Но нужно хорошее ПЛАНИРОВАНИЕ!

Сначала нам нужно найти все возможные компоненты, которые также необходимо перенести вместе с Кодексом.Если в проекте Delphi7 используются сторонние компоненты, которые недоступны, то довольно сложно продвинуться дальше.Во-вторых, другое преобразование типов связано с Unicode, что довольно просто.И, наконец, конечно, нам нужно получить другие поддерживающие библиотеки, BDE и адаптеры баз данных.

Для насыщенного пользовательского интерфейса можно использовать Delphi FireMonkey .

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

...