Переместить проект с 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
- Исполняемые файлы, собранные в Delphi2010, примерно в 3 раза больше байтов, чем скомпилированные Delphi3.
- Любая компиляция приведет к тому, что на целую кучу будет больше предупреждений и подсказок, чем на Delphi3. Хорошей практикой является удаление всех намеков и предупреждений.
- Я нашел несколько поврежденных файлов Pascal, которые прекрасно компилируются в Delphi3, но не в Delphi2010. Визуально не возникает никаких проблем или различий. Однако ошибки компиляции ясно указывают на ошибку в неправильном номере строки. В моих примерах проблема была связана с CR/LF, в моем Delphi был только CR. Сложная проблема, которую нужно решить, и трата времени. Однако текст можно просмотреть в блокноте или с помощью WinHex.exe. Я написал программу PARSER.EXE, которая позволяет идентифицировать эти управляющие символы. Это лучший способ редактировать эти файлы в Блокноте, когда вы знаете, где находятся управляющие символы.
- AnsiString. Delphi 2010 теперь использует AnsiStrings, MBCS и WideStrings (UniCode). В отличие от Delphi 3, который использовал строки ASCII. Стандартная реализация Delphi 2010 использует строки в качестве Unicode и Chars в качестве 16-битных символов. Теперь необходимо убедиться, что многие 8-битные строки ASCII определены как AnsiStrings. Очевидно, что старые библиотеки, которые имели интерфейсы, определенные с помощью PChars, теперь требуют PAnsiChar.
- Код не является взаимозаменяемым между платформами Delphi по следующим причинам
- Delphi 2010 имеет дополнительные функции и типы переменных, такие как AnsiChar, AnsiStrings.
- Формы не совместимы между версиями, потому что последние версии Delphi имеют дополнительные свойства.
- Dcus не совместимы между версиями.
- Пакеты не совместимы между версиями. В Delphi 2010 нет Crystal Reports, поэтому вам может потребоваться приобрести его отдельно. Любые другие пакеты, которые были использованы, также могут потребовать обновления по стоимости.
- Многие функции, такие как Readfile, Writefile, GettickCount, теперь настаивают на параметрах как DWORD, тогда как Delphi3 был более терпимым. Некоторые из этих функций связаны с большей емкостью диска.
- Всплывающие меню. У них есть новое свойство под названием AUTOHOTKEY. Это должно быть установлено на ручной. Если этот параметр установлен по умолчанию, в заголовки будет вставлено "&" для обеспечения функциональности "горячих клавиш".
- Курсоры. Метод использования курсоров изменился.
- Похоже, что Delphi2010 имеет целую кучу дополнительных функций, которые были добавлены за счет упрощения использования. Вероятно, Delphi 3 имел лучший и более простой в использовании интерфейс.
- Помогите. Может быть, лучше, чем Delphi 3. Но, кажется, исчезает на несколько минут, пытаясь найти справочную информацию. Интерактивная помощь - это неприятность.
- 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 обычно легко, если речь идет о вашем собственном коде.
Я вижу две трудности:
- Вы использовали String как общий буфер, сохраняя что-то еще, кроме символов.
- Ваш код предполагает, что sizeof(char) равен 1, то есть используйте Length(), когда следует использовать SizeOf() или наоборот.
Самая сложная часть - сторонние компоненты.
Похоже, что все компоненты, которые вы используете, все еще существуют для D2010, и это хороший момент. Но вполне вероятно, что их интерфейс был изменен и, конечно, потребует некоторых изменений кода.