2009-05-18 3 views
5

У меня есть большое приложение, написанное на Delphi. Я хочу его обновить, начиная с пользовательского интерфейса. Я думал об использовании нового Qt. Во время процесса обновления я хочу перейти на C++ в качестве языка программирования. Есть ли способ постепенно переписать приложение (начиная с пользовательского интерфейса), чтобы перейти на C++?Port Delphi to C++ постепенно

Благодарим за помощь.

+3

Я добавляю это в качестве комментария, потому что мой опыт Delphi/Borland закончился много лет назад. Тем не менее, я ДУМАЮ, Borland C++ компилятор будет успешно создавать файлы Delphi тоже. Возможно, вы сможете просто смешивать языки в одном проекте. Вы должны попробовать. –

+3

Если вам необходимо изменить, почему бы вам не переключиться на delphi 2009 и остаться с собственным пользовательским интерфейсом, VCL вместо QT? –

+0

Зачем нужно переключение с Delphi на C++? Вам нужна кросс-платформа? –

ответ

9

Лучший курс действий зависит от среды разработки C++.

Если это C++ Builder у вас есть две возможности:

  • Использование во время выполнения пакетов вместо нормальных библиотек DLL. Это избавит вас от многих головных болей, когда дело доходит до строковой сортировки и сопоставления классов классов с плоскими функциями DLL.

  • Использовать смешанный код. Вы можете смешивать код Delphi/Pascal с кодом C++ в том же проекте. (Только один язык в одном модуле/блоке, хотя)

Если любой другой C++ компилятор:

  • Go пути вы предложили с библиотеками DLL. Вы должны создать какой-то слой/фасад, чтобы сопоставить функциональность ваших классов с плоскими функциями DLL.

  • Если вы хотите пойти простой путь DLL, даже если вы используете C++ Builder вы можете попробовать использовать общий менеджер памяти, как ShareMem (поставляется с Delphi) или FastMM (SourceForge), чтобы обеспечить прохождение string с вместо PChar s.

  • Создайте .objs вместо .dcus, чтобы оба компилятора работали с одним и тем же выходным форматом. Затем связывайте их непосредственно в программу на C++. Это по сути то же самое, что и при создании DLL, но оно статично. Вы обнаружите определенные ошибки во время компиляции, а не во время выполнения.

+0

Я не доволен этим, но я думаю, что это только так это. Спасибо всем за понимание. –

2

Конвертировать приложение Delphi в dll-s. Вы должны выяснить какой-то разумный API и разоблачить его в dll. Затем используйте эти dll-ы из приложения C++.

Существует также возможность создавать объекты COM +, но они являются специфичными для Windows технологиями (из-за QT я предполагаю, что вы намерены создать многоплатформенное приложение).

6

Возможно, проще перейти на другую сторону - перепишите бизнес-логику на C++ и вызовите ее из Delphi через интерфейсы C. Это особенно важно, поскольку одна из ключевых сильных сторон Delphi работает с графическими интерфейсами.

2

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

Но я пошел наоборот. (увеличение процента C++, которое я, в конечном счете, передал в Delphi)

0

Я вас понимаю, потому что я тоже разработчик delphi, и я тоже хочу перенести свой код в среду QT, то есть на C++. Я хочу достичь цели кросс-платформы: поэтому я отбросил решение dll, чтобы сохранить исходный код, потому что он заставляет меня удерживать Delphi IDE в режиме ожидания. Я не хочу возвращаться, чтобы написать/исправить/улучшить код delphi снова. Я хочу развиваться! Единственный выбор, который я вижу, это переписать DELPHI код в C++ и пересобрать его с Qt Creator (подробно, она будет перекомпилировать с г ++ MinGW компилятором, вызываемой Qt Creator.)

Переписывая код предложит вам шанс реорганизовать свои классы на совместимый с QTed. Gui будет полностью переписан, потому что VCL управляется событиями, QT вместо этого управляется сигналом, но я думаю, что вы уже знаете это.

Помните: сохраняя код Delphi целым и создавая его в библиотеке dll или компилируя его в objs, вы будете вынуждены поддерживать обслуживание источников Delphi.

+0

Кросс-платформу можно упростить с помощью CodeTyphon. Это мощный пакет с одним щелчком мыши для разработки кросс-платформенных родных паскалей. Он уже поддерживает 4 хоста CPU/OS (Win32, Win64, Linux32, Linux64) и 16 целей ЦП/ОС (arm-Wince, arm-Linux, arm-Embedded, arm-gba, arm-nds, i386-Win32, i386 -Linux, i386-FreeBSD, i386-Haiku, x86_64-Win64, x86_64-Linux, x86_64-FreeBSD, powerpc-Linux, powerpc64-Linux, sparc-Linux, sparc-Solaris). Подробнее поддерживаются в Lazarus/FreePascal. http://www.pilotlogic.com/sitejoom/index.php?option=com_content&view=article&id=96&Itemid=148 – avra

1

У меня есть такая же потребность - перенесите 9-летний проект с примерно 300K + строками кода от D2010 до QT 4.6. я решил сделать следующее:

  1. порта АД зависимости от драйвера SQLite в Delphi с использованием DISql3.
  2. Перенос моей базы данных MS на SQLite
  3. Удалите модули данных, поставив элементы управления db в классы доступа к данным обертки и другие элементы управления, зависящие от пользовательского интерфейса, такие как ImageLists в формах.
  4. Отдельно укажите Модели (доступ к Db), Views (Forms) и контроллеры. Начните так, что я могу начать портирование моделей и контроллеров и постепенно выполнять модульные тесты.
  5. Наконец, перенесите представления (формы) в диалоги QT. Это самая сложная часть, поскольку среднее приложение зависит от по меньшей мере 3-4 сторонних элементов управления. Например, я в значительной степени использовать DevExpress для VCL, и я планирую заменить его QTitan (http://www.devmachines.com/qtitan_grid_overview.php)

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