有没有简单的方法可以将Delphi 2009中的Win32应用程序移植到.NET?

时间:2020-03-06 14:42:41  来源:igfitidea点击:

我们希望从Delphi 7.0迁移到Delphi 2009,以跟上现代IDE和最新技术的发展。我们的目标平台是.NET。实现此目标的最佳方法是什么?

解决方案

从Delphi 7迁移到Delphi 2009可能很简单,只有很小的变化(例如最近讨论的从ANSI到Unicode字符串的迁移)。
不过,向.NET迁移并不是那么直接。尽管有一个VCL.NET使GUI的迁移成为可能,但其他严重问题将无法正常进行。因此,我们可能会想到具有Win32代码和.NET代码,并通过COM将它们组合在一起。
(我希望我们已经了解COM,否则这可能不是一个选择;-))

请记住,D2009是Win32版本,而不是.net。我想我们想分两步走,首先移至D2009,然后移至.net?

幸运的是,delphi是一个非常稳定的平台,将旧应用程序转换为最新版本要容易得多,但是我们要考虑的是不同的事情。

如果应用程序正在使用BDE访问Db,则将其转换为使用其他技术,例如ADO或者DBX。

如果使用第三方组件,请确保存在D2009和/或者.NET的版本。

一个非常微妙的方面是字符串处理。如果"正常"使用字符串,应该不会有大问题,但是,如果像在C语言中那样将字符串用作"字节缓冲区",则必须小心并尝试重写这些部分。经验法则是"尝试摆脱代码中的所有PChar"。

移植绝非易事。但是,Delphi和.NET之间的语义非常接近,因为两者都由Anders Hejlsberg担任首席架构师。我们很可能需要将Win32 VCL调用替换为其等效的VCL.NET。

我们可能需要升级到CodeGear RAD Studio,因为那样我们将拥有一个同时支持Delphi和.NET语言(主要是C#)的IDE。

从一种技术转移到另一种技术时,很多次我都能够放弃控制替代品。例如,我能够用其ADO.NET替代品替换BDE数据库控件,而无需真正更改代码。最终,我们拥有该代码,并且比我们任何人都了解更多。

当我们对Win32可执行文件有很好的支持时,为什么要以.NET框架为目标? Delphi已经是业界的一小部分,而带有.NET的Delphi甚至更小。在.NET世界中,Delphi始终将成为二等公民。 Delphi已经是一流的Win32公民。

Delphi 2009仅针对Win32.
对于.NET,我们可以使用RAD Studio 2007,它具有.NET的Delphi个性,并且将简单的VCL应用程序移植到针对.NET 2.0框架的VCL.NET应该非常容易。但是,如果使用任何第三方组件和库,则也必须检查其.NET替代方案。

如果我们发现这会花费太多精力,或者想要针对最新的.NET框架,则最好使用Microsoft的Visual Studio和C#从头开始重写项目。

免责声明:我没有将Delphi Win32项目移植到.NET的经验,所以这只是我的拙见。

我会处理从D2007到D2009出现的字符串处理的Unicode情况,此步骤中涉及的更改可能会对应用程序产生很大的影响(只有我们能知道这一点)。另外,我们将需要考虑使用哪些第三方工具/库/组件。并不是所有的东西都跳到了D2009上,而且某些人气不佳的组件可能根本就不会跳到D2009上。

一条更明智的途径可能是将D7迁移到D2007(这是一条颇为人知的途径,在获得很多胜利和值得改进的情况下,基本上可以轻松完成)。然后,我们将进入一个现代,稳定,最新,受支持的Delphi平台,从中我们可以更好地评估向.Net的跳转。

我对最后阶段的看法会引起其他一些评论,请注意,除非我们从.Net获得了巨大的胜利,否则我不明白为什么我们会离开Delphi。鉴于各种运行时和Service Pack的现代要求,我认为Delphi已成为Win32开发中越来越可行的相关工具。
或者将代码从D7升级到D2007 / D2009,或者就从D7升级到.Net。做一个然后另一个似乎有点奇怪!

遵循上面Giacomo的回答,如果我们使用的是BDE,那么我建议使用MicroOlap的DAC http://www.microolap.com/,这样可以节省大量时间,而不必将代码转换为其他代码。我正在使用PostgresDAC,该产品非常稳定且快速。