有哪些工具可以将Delphi 7应用程序转换为C#和.Net框架?
我维护着一个用Delphi 7编写的仅用于PC的旧应用程序。尽管Delphi过去为我提供了很好的服务,但现在我仅将其用于该应用程序,并且发现我的语言能力逐渐下降。它的语法与我的Java / Ruby的"日常工作"语言太不同了,因此我花了更长的时间来编写新代码,而且它太旧了,我没有使用很多接口,所以代码不受管理现在对我来说很古老!
我的许多用户都转移到Vista上,这可能取决于兼容性,即IT部门如何配置PC,因此可能会在兼容模式下运行该应用程序,或者可能会出现GPF问题,因此我必须对应用程序进行一些维护。我想知道是否应该跳到更熟悉的堆栈。
是否有一个自动化工具来完成将代码库转换为C#的工作,让我将精力集中在对任何非标准组件的转换上?我正在使用一个称为AbsoluteDatabase的嵌入式数据库组件,该组件与BDE兼容,并且始终使用标准SQL,并且使用了一个本机的Delphi HTML浏览器组件,可以将其与Microsoft领域的某些组件互换。
这些转换工具有多好?
解决方案
回答
我不知道进行该转换的任何自动化工具。我个人建议我们坚持使用Delphi,也许只是升级到新版本。我已经看到了几个试图从Delphi转换为C#的DOM代码,但这不能解决库问题。
CodeGear(前身为Borland)有一个可以从Cto Delphi转到OK的工具。我认为去往其他方向的工具也可以正常工作(需要大量编辑)。这是一个瑞典语工具,它使用相同的CodeDOM原理从Delphi转换为C(以及许多其他语言)。还有其他人,我现在找不到。
另一个选择是升级到用于.NET的Delphi版本,然后将代码移植到.NET。一旦可以在Delphi for .NET中使用它(除非嵌入式DB除非具有.NET版本,否则它就非常容易,嵌入式DB除外),我们就可以使用.NET Reflector和File Disassembler将IL转换为C#。我们仍将使用VCL,但可以使用Cin代替Object pascal。
另一个类似的解决方案是通过RemObjects将其移植到Oxygene。我相信他们有向WinForms迁移的Delphi Win32路径。然后使用.NET Reflector和File Disassembler将IL反转为C#。
简而言之,没有简单的答案。语言迁移比库迁移容易。这很大程度上取决于我们使用了什么第三方组件(超出AbsoluteDatabase)以及我们是否直接在应用程序中进行了Windows API调用。
另一个完全不同的选择是寻找离岸团队来维护应用程序。他们可能可以便宜地做到这一点。我们可以在国内找到一个人,但这无疑会让我们付出更多的代价(尽管美元下跌和就业市场疲软,我们永远都不知道……)
祝你好运!
回答
Many of my users are moving to Vista which may run the app in compatibility mode or may have GPF problems depending on how their PC is configured by their IT department, so I have to do some maintenance on the application. I'm wondering if I should jump to a more familiar stack.
除非我们执行非标准操作,否则D7应用程序应在Vista中运行良好。
至于转换为C#,我认为大多数转换工具都会浪费时间。更好的方法可能是从头开始重写应用程序。
回答
没有简单的答案,但是请记住,该语言的Delphi.net变体以.net运行时为目标,并且.net上的不同语言可以紧密地互操作。
我们可以尝试使其在Delphi.Net中进行编译,分解成不同的程序集,然后手动将其一一转换。 Reflector可以帮助将编译后的代码反向工程为等效于Ccode的框架,但没有注释,内部变量名称等。
另一方面,对于该项目,Delphi.net可能足够好(TM)。
但是除非我们有一个好的测试套件(考虑到Delphi 7的最新技术,我想可能不是),否则我们将引入错误。