Постепенно порт Delphi на C ++ - PullRequest
5 голосов
/ 18 мая 2009

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

Спасибо за вашу помощь.

Ответы [ 6 ]

9 голосов
/ 18 мая 2009

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

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

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

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

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

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

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

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

6 голосов
/ 18 мая 2009

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

2 голосов
/ 18 мая 2009

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

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

2 голосов
/ 18 мая 2009

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

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

1 голос
/ 10 ноября 2010

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

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

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

0 голосов
/ 05 августа 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...