逐步将Delphi移植到C++

5

我有一个用Delphi编写的大型应用程序。我想更新它,首先从用户界面开始。我考虑使用新的Qt。在更新过程中,我想改用C++作为编程语言。是否有一种逐步重写应用程序(从UI开始)以更改为C++的方法?

感谢您的帮助。


3
我会将其作为评论添加,因为我多年前的Delphi/Borland经验已经结束。不过,我认为Borland的C++编译器也可以成功地构建Delphi文件。您可能可以在同一项目中混合使用这两种语言。你应该尝试一下。 - Binary Worrier
3
如果需要更改,为什么不转换到 Delphi 2009 并保持原生 UI、VCL 而不是 QT? - curious slab
为什么需要从Delphi转换到C++?你想要跨平台吗? - Hugues Van Landeghem
也许这也很有趣:https://dev59.com/ZXRB5IYBdhLWcg3wc280 - Daniel Rikowski
6个回答

9
最佳方案高度依赖于C++开发环境。
如果是C++ Builder,你有两种可能性:
- 使用运行时包而不是普通的DLL。这将在字符串转换和将类层次结构映射到平面DLL函数时为您节省很多麻烦。 - 使用混合代码。您可以在同一项目中混合使用Delphi / Pascal代码和C++代码。(但一个模块/单元只能使用一种语言)
如果是其他任何C++编译器:
  • 按照您提议的方式使用DLL。 您需要创建某种层/外观来将类的功能映射到平面DLL函数。

  • 即使您使用C++ Builder,如果想要采用普通的DLL方式,可以尝试使用共享内存管理器,例如ShareMem(附带Delphi)或FastMM(SourceForge),以允许传递string而不是PChar

  • 创建.objs而不是.dcus,以便两个编译器使用相同的输出格式。 然后将它们直接链接到C++程序中。 这本质上与创建DLL相同,但是它是静态的。 您将在编译时而不是运行时发现某些类型的错误。


我对此并不满意,但我想那就是事实。感谢大家的见解。 - Tobias Langner

6

也许更容易的方法是反过来 - 用C++重写业务逻辑,并通过C接口从Delphi中调用它。这样做尤其有优势,因为Delphi的一个主要优点是能够处理GUI界面。


2

将您的Delphi应用程序转换为dll文件。您应该设计一些合理的API并在dll中公开它。然后从C ++应用程序中使用这些dll文件。

还有创建COM+对象的可能性,但它们是Windows特定技术(因为QT,我假设您打算创建多平台应用程序)。


2

通常情况下,虽然有异构语言的选择,但我发现冻结旧版本,并在新语言中重写下一个主要版本最终更节省时间。

但我走了相反的路线。(增加C++百分比,最终将其回溯到Delphi)


1

我有同样的需求 - 将约300K+行代码的9年旧项目从D2010迁移到QT 4.6。

我决定采取以下步骤:

  1. 使用DISql3在Delphi中将ADO依赖项移植到SQLite驱动程序。
  2. 将我的MS数据库迁移到SQLite。
  3. 通过将db控件放入包装器数据访问类中以及将其他UI相关控件(如ImageLists)放入表单中来删除数据模块。
  4. 清晰地分离模型(Db访问)、视图(表单)和控制器。这样做可以开始移植模型和控制器,并逐渐执行单元测试。
  5. 最后将视图(表单)迁移到QT对话框。这是最困难的部分,因为平均应用程序至少依赖于3-4个第三方控件。例如,我大量使用DevExpress for VCL,计划用QTitan (http://www.devmachines.com/qtitan_grid_overview.php) 替换它。

目前我正在进行第2阶段,但非常有信心增量方法会奏效。


0

我理解你的想法,因为我也是一个Delphi开发者,我想将我的代码迁移到C++的QT框架上。我希望实现跨平台的目标:因此,我放弃了保留原始源代码的DLL解决方案,因为这会强制我暂停使用Delphi IDE。我不想回到编写/修复/改进Delphi代码的过程中.. 我想进步!

我所看到的唯一选择就是用C++重新编写Delphi代码,并使用QT creator(具体来说,它将使用QT创建者调用g++ Mingw编译器进行重新编译)。

重写代码将提供您重构类以符合“QTed”规范的机会。GUI也将被完全重写,因为VCL是事件驱动的,而QT则是信号驱动的,但我想您已经知道这一点了。

记住:将您的Delphi代码保持完整并将其构建为dll库或编译为objs,将迫使您继续维护Delphi源代码。


跨平台可以更容易地通过CodeTyphon实现。它是用于跨平台本机Pascal开发的强大单击安装软件包。它已经支持4个CPU / OS主机(Win32,Win64,Linux32,Linux64)和16个CPU / OS目标(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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接