У нашей компании есть программное обеспечение, которое находится в разработке уже более 10 лет, поэтому есть некоторые действительно устаревшие вещи. Это все еще довольно функционально и все, но я вижу новые функции на Delphi XE, и это заставляет меня переключаться. Проблема заключается в том, что сам исходный код содержит более 300 МБ файлов .pas(всего 1 гб с компонентами и т.д.).
Мы используем пользовательские компоненты, старые jvcl файлы и последние версии devexpress.
Насколько сложно я могу ожидать, что что-то произойдет, если я решит перейти с Delphi 7 на Delphi XE?
Спасибо.
Единственной реальной проблемой является преобразование в Unicode. Вы должны узнать, как поддержка Unicode реализована в Delphi - начните с Marco Cantu Белая книга: Дельфы и Юникод
Невозможно оценить объем работы, необходимый для обновления старых приложений до Unicode, не зная фактического кода. Если бы вы использовали типы строк стандартным способом, преобразование было бы простым. Любые низкоуровневые трюки со строковыми типами (например, сохранение двоичных данных в строках) теперь устаревают и соответствующий код должен быть перезаписан.
Некоторые небольшие инструменты либо переносятся без каких-либо изменений, либо всего лишь несколько исправлений в unicode, чтобы запустить его.
Однако, если ваша кодовая база настолько велика, насколько вы объясняете, вы не должны полностью полагаться на то, что кто-то здесь скажет вам. Просто получите копию XE и загрузите код. Посмотрите, какие проблемы вы столкнулись, чтобы понять, сколько усилий оно предпримет.
В этот момент я портировал весь свой код на XE (даже старые проекты). Я использую те же самые библиотеки, насколько это возможно, поэтому, как только я переработал большинство из них, "перенос" приложений из Delphi 7 в Unicode Delphi обычно был просто повторяющейся задачей либо заниматься обновленными интерфейсами в библиотеках, либо исправить ошибки компилятора и предупреждения.
Наиболее распространенные ошибки, с которыми я столкнулся:
Юникод. Это займет 90% времени. Это раздражает, если код выполняет много низкоуровневой обработки строк, но большинство проблем можно легко устранить, добавив несколько типов.
компилятор сук, когда вы используете c in ['a'..'z']
. Вы должны использовать CharInSet()
для строк unicode.
Если вы установите ShortDateFormat, вы получите предупреждение компилятора, что вместо этого вы должны использовать FormatSettings.ShortDateFormat. В новом коде это хорошая идея. Если вы портируете, сначала проигнорируйте его, если хотите просто идти.
Кроме того, вы, вероятно, обновите свои сторонние библиотеки до более новых версий, чтобы вам не пришлось их переносить самостоятельно. Это не редкость для тех, кто изменил свои интерфейсы или работы, поэтому я загрузил некоторые пробные версии этих, чтобы увидеть, что было изменено.
Я делаю довольно много таких преобразований.
Вы должны подготовиться, указав свою текущую базу кода. Предпочтительно использовать автоматические модульные тесты, но, по крайней мере, иметь хороший план тестирования конечных пользователей.
Затем вам следует запланировать большую часть: преобразование Юникода для вашего приложения и вашей базы данных.
Наконец, существуют менее важные, но потенциально очень трудоемкие аспекты:
Когда вы портировали его, настало время изменить ситуацию: поскольку вы видели всю базу кода, теперь вы знаете, где ваши слабые стороны, поэтому вы можете начать рефакторинг и получить лучшее приложение, чем было раньше.
Вы упомянули SQL в одном из своих комментариев ответа... Поддерживает ли ваша база данных уникод? Если нет, вы можете много работать. Возможно, вам придется конвертировать базы данных "на лету" или сделать инструмент преобразования для ваших пользователей. Возможно, вам придется обновить базу данных или даже переключиться на что-то еще. Например, DBISAM не поддерживает unicode, но поставщик делает ElevateDB, который есть. Переход не является тривиальным. И некоторые другие библиотеки, такие как Hyperstring, написанные в основном на ассемблере, являются еще одним больным местом.
Мой проект составляет около миллиона строк кода, и я недавно портировал его с CB9 на XE. Чтобы сократить объем работы, я впервые переписал много, поэтому я больше не зависел от пакетов сторонних компонентов, а затем тщательно просмотрел все связанные строки (unicode) и только потом перешел в XE. Подготовка была большой работой, фактический порт был относительно прост.
Это определенно задача для выполнения этой МИГРАЦИИ. Но нужно хорошее ПЛАНИРОВАНИЕ!
Сначала нам нужно найти все возможные компоненты, которые также необходимо перенести вместе с кодом. Если в проекте Delphi7 есть сторонние компоненты, которые недоступны, его довольно сложно продолжить. Во-вторых, преобразование другого типа связано с Unicode, что довольно просто. И, наконец, мы должны получить другие поддерживающие библиотеки, BDE и Адаптеры баз данных.
Для Rich User Interface можно использовать Delphi FireMonkey.
Delphi становится все лучше и лучше, так как теперь он поддерживает от Desktop до Web для разработки приложений для мобильных телефонов.