Переместить проект с Delphi 3 на Delphi 2010

Меня попросили заново открыть проект, который я написал в 1998/99 году в Delphi 3, и который с тех пор работает стабильно. У меня есть кодовая база Delphi 3 на устаревшей машине с Windows 98, которая существует только для того, чтобы поддержать этот проект. Очевидно, я хотел бы перенести базу исходного кода в 21 век, прежде чем предпринимать какие-либо серьезные изменения.

Я с радостью отмечаю, что Delphi 2010 (сейчас я нахожусь в 2007 году) утверждает, что может импортировать проекты из Delphi 2 и далее. У кого-нибудь есть опыт импорта больших проектов из Delphi 3? Могу ли я ожидать, что это будет легкий переход или трудный?

Кроме того, в оригинальном проекте используются сторонние компоненты, включая DBISAM, WPTools и TMS Planner. Я отмечаю, что все они по-прежнему доступны для последней версии Delphi. Предполагая, что я сначала установлю новые версии в Delphi 2010, могу ли я ожидать, что части моего приложения, которые используют эти компоненты, также будут переведены? Я знаю, что, по крайней мере, WPTools изменил некоторые из его компонентных структур и интерфейсов, начиная с версии, использованной в исходном приложении, и, очевидно, у меня будет некоторая перекодировка, но будет ли сбой этих частей программы препятствовать моей базе кода обновляется вообще?

7 ответов

Решение

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

Первое, что я хотел бы сделать, это убедиться, что ВСЕ файлы DFM преобразованы в их текстовое представление. Я полагаю, что это было установлено по умолчанию в более поздних версиях Delphi, но, насколько я помню, Delphi 3 использовал двоичный формат. Там должен быть служебный файл с именем DFMConvert или что-то в каталоге bin Delphi 3, который позволяет конвертировать DFM в текст. Причина, по которой вы захотите это сделать, заключается в том, чтобы убедиться, что вы можете прочитать исходный код, если вам нужно выполнить ручное редактирование DFM из-за не загружаемого компонента. Вы не только перепрыгиваете версии Delphi, но вы также перепрыгиваете версии КАЖДОГО компонента, который вы используете, и может быть несколько несовместимостей, которые могут привести к сбою загрузки компонента. Я обнаружил, что если это так, и у вас есть "новая" версия, то используйте непосредственное редактирование источника DFM и сравните тестовую форму с компонентом на ней, с тем, что содержится в вашей старой версии. Удалите все (или переименуйте), которое неуместно, и затем попытайтесь загрузить форму снова.

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

Хорошая новость заключается в том, что ваш код должен работать нормально, как только вы исправите предложение компонентов / использования. Если вы перейдете непосредственно к Delphi 2010, вашей единственной другой проблемой будет Unicode, и компилятор проделает фантастическую работу, сообщая вам обо всех из них с помощью ошибок и предупреждений.

Поскольку у вас D2007 и предполагается, что все эти наборы компонентов поставляются с D2007 dcus, я посоветую вам сначала попробовать заново открыть кодовую базу на D2007. И после этого перейдите на D2010 из-за функции Unicode в реальном VCL, что может создать некоторые проблемы с миграцией (которые я не буду обсуждать здесь, потому что это подробно обсуждается в Интернете и здесь, на SO).

Я бы сказал, что потому, что где-то между D5 и D7 (не записывать точно) произошла реорганизация юнита rtl (с созданием юнита Variants.pas, и многие юниты OTAPI изменили имена и т. Д.). Так что именно там возникнут ваши первые проблемы. РЕДАКТИРОВАТЬ: перемещены не только варианты, но и многое другое для интеграции IDE - чтобы избежать развертывания нелицензионного кода. Если у вас есть некоторый код OTAPI (например, код, который позволяет публиковать свойства в унаследованных формах), его необходимо будет переместить в пакетный проект.

Как сказал Скрамрадт, вам, возможно, придется иметь дело с бинарной вещью DFM....

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

Вот несколько замечаний, которые мы сделали по поводу обновления до Delphi 2010

  1. Исполняемые файлы, собранные в Delphi2010, примерно в 3 раза больше байтов, чем скомпилированные Delphi3.
  2. Любая компиляция приведет к тому, что на целую кучу будет больше предупреждений и подсказок, чем на Delphi3. Хорошей практикой является удаление всех намеков и предупреждений.
  3. Я нашел несколько поврежденных файлов Pascal, которые прекрасно компилируются в Delphi3, но не в Delphi2010. Визуально не возникает никаких проблем или различий. Однако ошибки компиляции ясно указывают на ошибку в неправильном номере строки. В моих примерах проблема была связана с CR/LF, в моем Delphi был только CR. Сложная проблема, которую нужно решить, и трата времени. Однако текст можно просмотреть в блокноте или с помощью WinHex.exe. Я написал программу PARSER.EXE, которая позволяет идентифицировать эти управляющие символы. Это лучший способ редактировать эти файлы в Блокноте, когда вы знаете, где находятся управляющие символы.
  4. AnsiString. Delphi 2010 теперь использует AnsiStrings, MBCS и WideStrings (UniCode). В отличие от Delphi 3, который использовал строки ASCII. Стандартная реализация Delphi 2010 использует строки в качестве Unicode и Chars в качестве 16-битных символов. Теперь необходимо убедиться, что многие 8-битные строки ASCII определены как AnsiStrings. Очевидно, что старые библиотеки, которые имели интерфейсы, определенные с помощью PChars, теперь требуют PAnsiChar.
  5. Код не является взаимозаменяемым между платформами Delphi по следующим причинам
  6. Delphi 2010 имеет дополнительные функции и типы переменных, такие как AnsiChar, AnsiStrings.
  7. Формы не совместимы между версиями, потому что последние версии Delphi имеют дополнительные свойства.
  8. Dcus не совместимы между версиями.
  9. Пакеты не совместимы между версиями. В Delphi 2010 нет Crystal Reports, поэтому вам может потребоваться приобрести его отдельно. Любые другие пакеты, которые были использованы, также могут потребовать обновления по стоимости.
  10. Многие функции, такие как Readfile, Writefile, GettickCount, теперь настаивают на параметрах как DWORD, тогда как Delphi3 был более терпимым. Некоторые из этих функций связаны с большей емкостью диска.
  11. Всплывающие меню. У них есть новое свойство под названием AUTOHOTKEY. Это должно быть установлено на ручной. Если этот параметр установлен по умолчанию, в заголовки будет вставлено "&" для обеспечения функциональности "горячих клавиш".
  12. Курсоры. Метод использования курсоров изменился.
  13. Похоже, что Delphi2010 имеет целую кучу дополнительных функций, которые были добавлены за счет упрощения использования. Вероятно, Delphi 3 имел лучший и более простой в использовании интерфейс.
  14. Помогите. Может быть, лучше, чем Delphi 3. Но, кажется, исчезает на несколько минут, пытаясь найти справочную информацию. Интерактивная помощь - это неприятность.
  15. BorlandMM.dll не работает в Windows 2000 с приложениями Delphi 2010. Так что, возможно, вам придется обновить загрузку ПК, если вы хотите использовать эту DLL.

У меня есть около 100 приложений DLL и COM-серверов для обновления. Возможно около 12 недель работы с вводом в эксплуатацию. Надеюсь это поможет.

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

Одно замечание: если вы используете какие-либо сторонние пакеты, убедитесь, что у них есть версия Delphi 2010, которую вы можете обновить до преобразования. Delphi 2009 будет в порядке, но я бы не стал использовать более старые пакеты в D2010.

Я не могу сказать много о переносе D3 на D2010, но недавно я успешно перенес D6 на D2010. Начнем с того, что я сделал, чтобы убедиться, что все сторонние компоненты, которые вы использовали в D3, также доступны в D2010. Перекомпилируйте любые пользовательские компоненты от D6 до D2010. Загрузил мой исходный код D6 и скомпилировал. Обрабатывать все проблемы Unicode. Обработайте все ошибки компилятора одну за другой... все сделано за 3 дня (около 30000 строк кода)

У меня есть проектная группа Delphi 7, которую Delphi 2010 легко обновить. К сожалению, при следующем запуске с вновь созданными файлами группы проектов Delphi 2010 среда IDE просто аварийно завершает работу и исчезает после загрузки проекта. Никакие исключения не отображаются, никаких сообщений об ошибках. Мой обходной путь - все время использовать файл Delphi 7 и позволить Delphi 2010 обновлять все, что ему нравится, без использования вновь созданных файлов проекта.

Я подтверждаю то, что говорят другие: конвертировать приложение D3 в D2010 обычно легко, если речь идет о вашем собственном коде.

Я вижу две трудности:

  1. Вы использовали String как общий буфер, сохраняя что-то еще, кроме символов.
  2. Ваш код предполагает, что sizeof(char) равен 1, то есть используйте Length(), когда следует использовать SizeOf() или наоборот.

Самая сложная часть - сторонние компоненты.

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

Другие вопросы по тегам