我维护了一个用Delphi 7编写的旧PC应用程序.虽然Delphi过去很好用,但我现在只将它用于这个应用程序,并发现我的技能随着语言的减少而减少.它的语法与我在Java/Ruby的"日常工作"语言上有太大的不同,所以我需要更长时间才能进入编写新代码的过程中,而且它已经很老了我没有使用过很多接口,所以代码不能管理我现在看起来很古老!
我的许多用户都转向Vista,它可能在兼容模式下运行应用程序,或者可能有GPF问题,这取决于他们的IT部门如何配置他们的PC,因此我必须对应用程序进行一些维护.我想知道我是否应该跳到更熟悉的堆栈.
是否有一个自动化工具可以完成将代码库转换为C#的工作,让我专注于任何非标准组件的转换?我正在使用一个名为AbsoluteDatabase的嵌入式数据库组件,该组件兼容BDE并使用标准SQL,以及一个本机Delphi HTML浏览器组件,可以与Microsoft世界中的某些东西进行交换.
这些转换工具有多好?
我不知道有任何自动化工具可以进行转换.我个人建议你坚持使用Delphi,也许只是升级到新版本.我已经看到一些代码DOM试图从Delphi转换为C#,但这并没有解决库问题.
CodeGear(正式名称Borland)有一个从C#到Delphi的工具,可以正常工作.我认为朝着另一个方向工作的工具将会起作用(需要大量编辑).这是一个瑞典工具,它使用相同的CodeDOM原则,从Delphi到C#(以及许多其他语言).还有其他人,我现在找不到它们.
另一种选择是升级到更新版本的Delphi for .NET,并以这种方式将代码移植到.NET.一旦你在Delphi for .NET中工作(这将非常容易,除了嵌入式数据库,除非他们有.NET版本)你可以使用.NET Reflector和File Disassembler将IL转换为C#.您仍将使用VCL,但您可以使用C#而不是Object pascal.
另一个类似的解决方案是通过RemObjects将其移植到Oxygene.我相信他们有一个到WinForms的Delphi Win32迁移路径.然后使用.NET Reflector和File Disassembler将IL反转为C#.
总之,没有简单的答案.语言迁移比库迁移更容易.其中很大程度上取决于您使用的第三方组件(超出AbsoluteDatabase)以及您是否在应用程序中直接进行了任何Windows API调用.
另一个完全不同的选择是寻找离岸团队来维护应用程序.他们可能这么便宜.你可以在国内找到一个人,但毫无疑问会让你付出更多代价(尽管美元贬值和就业市场不佳你永远不会知道......)
祝好运!
有一份科学报告称,约翰布兰特成功地将150万行德尔福项目转变为C#.他编写了一个Delphi解析器,一个C#生成器和许多关于AST的转换规则.逐步扩展规则集,进行日常构建,大量单元测试以及对一些困难的Delphi部件的重写使他成为一个由4人组成的团队,其中一些原始开发人员具有深入的Delphi和C#知识,可以迁移软件在18个月内.John Brant是重构浏览器和SmaCC编译器构建工具包的原始开发人员,你不太可能快速完成