Лучший способ конвертировать код Delphi в C ++? - PullRequest
7 голосов
/ 13 марта 2009

У меня есть приложение, написанное на Delphi, которое компилируется в Delphi 2007. Я думаю, что оно изначально было написано на Delphi 7.

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

Каков наилучший способ сделать это? Какие бывают ярлыки, чтобы ускорить процесс?

РЕДАКТИРОВАТЬ: код компилируется в собственный код, а не .NET.

Ответы [ 7 ]

12 голосов
/ 13 марта 2009

Простой ответ: Вы не можете просто перенести нетривиальный код Delphi на C ++ без полного переписывания. Объектная модель C ++ сильно отличается от Delphi. Он не имеет базового класса, такого как TObject, из которого получены все другие объекты, и ему не хватает поддержки многих вещей RTTI, которые код Delphi часто принимает как должное. И нет простого способа переопределить Delphi RTTI в C ++, так как большая часть этого делается на уровне компилятора, и большая часть основана на том факте, что все классы Delphi происходят от TObject.

В C ++ также отсутствует поддержка концепции инициализации модуля и финализации разделов, которые так распространены в Delphi, и то, что у них вместо этого, сильно нарушено. (Посмотрите «фиаско инициализации статического порядка» для всех кровавых деталей.)

Обработка исключений в Delphi также намного более продвинута, чем в C ++. Частично это объектная модель и часть магии компилятора. Кроме того, C ++ не поддерживает конструкцию try-finally .

Если вы хотите перенести проект Delphi на Mac, Free Pascal - ваше лучшее решение. Он не на 100% совместим с Delphi, но достаточно хорош для многих вещей, и вы специально упомянули, что вам не нужно переносить вещи с Delphi GUI. AFAIK Область GUI является источником большинства недостатков совместимости FPC, поэтому, если в этом нет необходимости, FPC, вероятно, будет достаточно близок к идеалу для ваших нужд, по крайней мере, пока CodeGear не выпустит компилятор OSX. (Который официально не был объявлен, но, исходя из сказанного, было бы разумно предположить, что он будет доступен в следующем году.)

11 голосов
/ 13 марта 2009

Почему бы просто не использовать компилятор OS X Delphi? Free Pascal утверждает, что поддерживает Delphi в OS X (хотя я не пробовал это делать на Pascal).

4 голосов
/ 07 апреля 2009

Для преобразования вашего кода из Delphi в Cpp, взгляните на

http://ivan.vecerina.com/code/delphi2cpp/.

Я использовал это для преобразования некоторых классов и функций в SysUtils, DateUtils и StrUtils с использованием функций wxWidgets. Если вы планируете использовать wxWidgets для C ++, взгляните на http://twinforms.com/products/wxwidgets/wxvcl.php, в котором есть все преобразованные источники.

Если вы хотите напрямую разрабатывать приложения для Mac OSX, посмотрите wxForms для Delphi - http://twinforms.com/products/wxformsdelphi/index.php

3 голосов
/ 13 марта 2009

Я думаю, что это будет сложно сделать механически, так что вы, вероятно, смотрите на полное переписывание. Следует иметь в виду, что обычно Delphi использует структуры try ... finally для управления ресурсами, тогда как C ++ использует технику, известную как RAII (получение ресурсов - это инициализация). Вы должны прочитать об этом и других идиомах C ++, прежде чем пытаться преобразовать.

0 голосов
/ 13 марта 2009

Вы также можете использовать Delphi Prism . Это для .NET, но это последнее выражение в спецификации языка Delphi. Он также поддерживает Mac OSX (см. Ссылку). Также ребята из CodeGear / EMBT работают над новым компилятором, а также над новой версией Delphi, которая, как ожидается, выйдет в бета-версии в апреле и уменьшит разрыв между Prism и RAD studio. См. Их страницу «Бета-программы».

0 голосов
/ 13 марта 2009

«Правильный» способ сделать это - переписать его в Objective C. Я нахожу Objective C немного странным, но есть много общего с Delphi в том, как объекты соединяются и делегируют.

Возможно, вы сможете использовать Free Pascal, чтобы сделать это быстрее, но вам следует серьезно подумать о переписывании.

Я был бы влюблен в Embarcadero, если бы они могли выпустить версию Delphi для Mac OS X, которая, как вы знаете, не была такой же отстойной, как Kylix. Можно мечтать.

Редактирование. Пребывание в Delphi дает большую выгоду, и наличие отдельной версии для Mac в Objective C. Во-первых, это означает, что вам не нужно переписывать версию в Windows, теряя (предположительно) годы инвестиции в код Delphi. Во-вторых, программное обеспечение Mac работает не так, как Windows, с точки зрения пользовательского интерфейса. Простой порт продукта неуместен и мешает разработчику использовать замечательные встроенные функции Windows и Mac. Смотрите: старые версии MS Word для Mac или iTunes для Windows. Они выглядят и чувствуют себя не так.

0 голосов
/ 13 марта 2009

Если ваш код компилируется в Delphi 2007 в сборки .NET, у вас может быть гораздо более простой вариант, чем пытаться переносить объект Delphi с паскаля на C ++.

Вы могли бы потенциально скомпилировать свою логику в сборки .NET (и, возможно, даже части пользовательского интерфейса) и использовать Mono для запуска ее на Mac. Вы можете написать собственный графический интерфейс для Mono или даже создать одно независимое от платформы приложение.

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