Насколько сложно перенести проект с Delphi 7 на Delphi XE?

33

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

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

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

Спасибо.

  • 3
    Это должно быть довольно легко, это займет у вас время, так как ваш проект большой
  • 0
    Это субъективный вопрос. Да, это трудно, но нет, не очень.
Показать ещё 1 комментарий
Теги:
delphi-7
delphi-2010
delphi-xe

6 ответов

28
Лучший ответ

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

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

  • 1
    Вау, очень информативно, спасибо!
15

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

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

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

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

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

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

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

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

  • 0
    Спасибо, тогда я столкнусь со многими из них. Я просто ковыряюсь, потому что тогда нам придется покупать Delphi XE.
6

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

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

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

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

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

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

6

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

  • 0
    Я использую Microsoft SQL Server 2008 SQL_Latin1_General_CP1_CI_AS, я не думаю, что я должен столкнуться с проблемами, не так ли?
  • 0
    Вы не обязаны менять свою базу данных на Unicode (если вам не нужно хранить весь набор Unicode). Клиент БД и драйвер будут конвертировать туда и обратно, но будьте осторожны, чтобы написать то, что можно конвертировать без потерь, если вы используете LATIN1. Многие программисты Delphi упускают то, что многие базы данных не находятся под частным контролем приложений. Это данные компании, используемые многими приложениями, и приложение должно соответствовать структуре базы данных, а не наоборот.
5

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

  • 0
    Ах, это хорошая идея, моя тоже очень большая. Самая большая проблема, с которой я сталкиваюсь, - это пользовательские компоненты, они были созданы специально для Delphi 7 и представляют собой разновидности общих элементов управления (отредактированные версии правок, меток, кнопок и т. Д.). Основной причиной для пользовательских компонентов было добавление свойства, которое считывало их заголовок из sql, это было реализовано как средство локализации, которое я считаю устаревшим.
  • 0
    это не будет проблемой вообще
Показать ещё 1 комментарий
0

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

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

Для Rich User Interface можно использовать Delphi FireMonkey.

Delphi становится все лучше и лучше, так как теперь он поддерживает от Desktop до Web для разработки приложений для мобильных телефонов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню