将Delphi代码转换为C ++的最佳方法?

时间:2009-03-13 01:18:48

标签: c++ delphi macos

我有一个用Delphi编写的应用程序在Delphi 2007中编译。我认为它最初是用Delphi 7编写的。

无论如何,我需要将所有核心非GUI代码转换为C ++,因为我想发布该软件的Mac版本。

最好的方法是什么?我可以采取任何捷径来加快这个过程吗?

编辑:代码编译为本机代码,而不是.NET。

7 个答案:

答案 0 :(得分:12)

简单回答:如果没有完全重写,你根本无法将非平凡的Delphi代码移植到C ++。 C ++的对象模型与Delphi有很大的不同。它没有像TObject这样的基类,从中派生出所有其他对象,并且它缺乏对Delphi代码通常认为理所当然的许多RTTI内容的支持。并且没有简单的方法可以在C ++中重新实现Delphi RTTI,因为很多都是在编译器级别完成的,并且很多都是基于所有Delphi类都来自TObject的事实。

C ++也缺乏对Delphi中常见的单元初始化 finalization 部分的概念的支持,而且它的内容却严重受损。 (查看所有血腥细节的“静态顺序初始化惨败”。)

Delphi的异常处理也比C ++更先进。部分内容是对象模型及其编译魔术的一部分。另外,C ++不支持 try-finally 构造。

如果您想将Delphi项目移植到Mac,Free Pascal是您的最佳解决方案。它与Delphi没有100%的兼容性,但它对很多东西都很好,你特别提到你不需要移植Delphi GUI的东西。 AFAIK GUI区域是大多数FPC兼容性弱点的来源,因此如果没有必要,FPC可能非常接近理想的需求,至少在CodeGear获得OSX编译器之前。 (这还没有正式宣布,但根据已经说过的各种事情,假设明年某个时候可以使用它是不合理的。)

答案 1 :(得分:11)

为什么不使用OS X Delphi编译器? Free Pascal声称支持OS X上的Delphi(虽然不是Pascal编码器,但我没有尝试过)。

答案 2 :(得分:4)

要将代码从Delphi转换为Cpp,请查看

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

我使用它来使用wxWidgets函数转换SysUtils,DateUtils和StrUtils中的一些类和函数。如果您打算使用wxWidgets for C ++,请查看具有所有已转换源的http://twinforms.com/products/wxwidgets/wxvcl.php

如果你想直接开发Mac OSX应用程序,那么看看wxForms for Delphi - http://twinforms.com/products/wxformsdelphi/index.php

答案 3 :(得分:3)

我认为这很难以机械方式进行,所以你可能正在寻找一个完整的重写。需要记住的一点是,通常Delphi使用try ... finally结构进行资源管理,而C ++使用称为RAII的技术(资源获取是初始化)。在尝试转换之前,您应该阅读这个和其他C ++习语。

答案 4 :(得分:0)

如果您的代码在Delphi 2007中编译成.NET程序集,那么您可能比尝试从Delphi的对象pascal移植到C ++更容易。

您可以将逻辑编译成.NET程序集(甚至可能是UI的一部分),并使用Mono在Mac上运行它。您可以围绕Mono编写自定义GUI,甚至可以创建一个独立于平台的应用程序。

答案 5 :(得分:-1)

您也可以使用Delphi Prism。它适用于.NET,但它是Delphi语言规范中的最后一个表达式。它还支持Mac OSX(参见链接)。此外,来自CodeGear / EMBT的人们正在为新的编译器以及Delphi的新版本工作,该版本预计将在4月份进入测试阶段并缩小Prism和RAD工作室之间的差距。查看他们的“测试计划”页面。

答案 6 :(得分:-2)

执行此操作的“正确”方法是在Objective C中重写它。我发现Objective C有点奇怪,但Delphi在对象连接和委托方式方面有很多相似之处。

您可以使用Free Pascal更快地完成它,但您应该认真考虑重写。

我会爱上Embarcadero,如果他们能够发布一个Mac OS X版本的Delphi,你知道,它不像Kylix那样糟糕。人们可以做梦。

编辑:留在Delphi中有一个很大的好处,并且在Objective C中为Mac安装了一个单独的版本。首先,这意味着你不需要在Windows上重写版本,从而失去了(可能)多年的版本投资德尔福代码。其次,从UI的角度来看,Mac软件的运行方式与Windows不同。产品的简单端口是不合适的,并且使开发人员不能使用Windows和Mac的强大本机功能。请参阅:旧版本的MS Word for Mac或iTunes for Windows。他们看起来和感觉都错了。