Переместить проект с Delphi 3 на Delphi 2010 - PullRequest
5 голосов
/ 02 октября 2009

Меня попросили заново открыть проект, который я написал в 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 ]

6 голосов
/ 02 октября 2009

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

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

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

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

5 голосов
/ 02 октября 2009

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

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

Как сказал скрамрадт , вам, возможно, придется иметь дело с бинарным DFM-элементом ....

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

4 голосов
/ 20 октября 2010

Вот несколько замечаний, которые мы сделали по поводу обновления до 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 недель работы с вводом в эксплуатацию. Надеюсь, это поможет.

3 голосов
/ 02 октября 2009

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

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

1 голос
/ 15 июня 2010

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

0 голосов
/ 06 апреля 2010

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

0 голосов
/ 13 октября 2009

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

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

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

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

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

...