我们希望从 Delphi 7.0 迁移到 Delphi 2009,以跟上现代 IDE 和当前技术。我们的目标平台是.NET。实现这一目标的最佳方法是什么?
6 回答
请记住,D2009 是 win32 版本,而不是 .net。我想你想做一个两步的路径,首先移动到 D2009 然后移动到 .net ?
幸运的是,delphi 是一个非常稳定的平台,将旧应用程序转换为最新版本要容易得多,但您需要考虑不同的事情。
如果您的应用程序使用 BDE 访问 Db,则将其转换为使用其他技术,如 ADO 或 DBX。
如果您使用第 3 方组件,请确保存在 D2009 和/或 .NET 版本
一个非常微妙的方面是字符串处理。如果您“通常”使用字符串,您应该没有什么大问题,但是如果您像在 C 中那样使用字符串作为“字节缓冲区”,那么您必须小心并尝试重写这些部分。一条经验法则是“尝试摆脱代码中的所有 PChar”。
我将采用从 D2007 到 D2009 的字符串处理的 Unicode 情况 - 此步骤中涉及的更改可能会对您的应用程序产生很大影响(只有您可以告诉这一点)。此外,您还需要考虑您正在使用哪些第三方工具/库/组件。并不是所有的东西都跳到了 D2009,而且很可能一些不太受欢迎的组件可能永远不会跳到 D2009。
一个更明智的路径可能是将 D7 迁移到 D2007(这是一条成熟的路径,基本上没有痛苦,有很多胜利和有价值的改进)。然后,您将处于一个现代、稳定、最新、受支持的 Delphi 平台中,您可以从中更好地评估跳转到 .Net。
我自己对最后阶段的看法会与其他一些评论相呼应,请注意——除非你从 .Net 中获得了一些巨大的胜利,否则我不明白你为什么会离开 Delphi。随着各种运行时和服务包的现代需求,我认为 Delphi 正在成为Win32 开发越来越 可行 的相关工具。要么将代码从 D7 升级到 D2007/D2009,要么直接从 D7 跳转到 .Net;做一个然后另一个似乎有点奇怪!
从 Delphi 7 迁移到 Delphi 2009 可能是直截了当的,只有微小的变化(例如最近讨论的从 ANSI 到 Unicode 字符串的迁移)。不过,迁移到 .NET 并不是那么简单。虽然有一个 VCL.NET 使得迁移 GUI 成为可能,但其他严重的事情将无法正常工作。因此,您可能会想到拥有 Win32 代码和 .NET 代码,通过 COM 将它们组合在一起。(我希望你已经了解 COM,否则这可能不是一个选项;-))
Delphi 2009仅针对 Win32。对于 .NET,您可以使用带有用于 .NET 的 Delphi 个性的RAD Studio 2007,并且将简单的 VCL 应用程序移植到以 .NET 2.0 框架为目标的 VCL.NET 应该相当容易。但是,如果您使用任何第三方组件和库,您也必须检查他们的 .NET 替代品。
如果您发现这工作量太大,或者如果您想针对最新的 .NET 框架,您最好使用 Microsoft 的 Visual Studio 和 C# 从头开始重写您的项目。
免责声明:我没有将 Delphi Win32 项目移植到 .NET 的经验,所以这只是我的拙见。
移植绝非易事。然而,Delphi 和 .NET 之间的语义非常接近,因为它们的首席架构师都是 Anders Hejlsberg。您很可能需要将 Win32 VCL 调用替换为等效的 VCL.NET 内容。
您可能想要升级到 CodeGear RAD Studio,因为这将使您拥有一个适用于 Delphi 和 .NET 语言(主要是 C#)的 IDE。
很多时候,当我从一种技术转移到另一种技术时,我能够更换控制装置。例如,我能够用它们的 ADO.NET 替代品替换 BDE 数据库控件,而无需真正更改代码。最终,您拥有代码并且比我们任何人都了解更多。
当您对 Win32 可执行文件有很好的支持时,为什么要针对 .NET 框架?Delphi 已经是该行业的一小部分,而带有 .NET 的 Delphi 甚至更小。Delphi 在 .NET 世界中始终是二等公民。Delphi 已经是一流的 Win32 公民。
按照上面 Giacomo 的回答,如果您使用的是 BDE,那么我可以建议 MicroOlap 的 DAC http://www.microolap.com/ - 这将为您节省大量时间,而不必将您的代码转换为其他东西。我正在使用 PostgresDAC,这个产品非常稳定和快速。