2011-04-17 49 views
33

我们公司有一个已经开发了10多年的软件,所以那里有一些非常过时的东西。它仍然功能强大,但是我看到了Delphi XE的新功能,这让我想要切换。问题在于源代码本身超过300MB的.pas文件(总共包含1gb的组件等)。将项目从Delphi 7迁移到Delphi XE有多难?

我们正在使用自定义组件,旧的jvcl的东西和最新的devexpress。

如果我决定从Delphi 7迁移到Delphi XE,那么我可以期待些什么?

谢谢。

+3

它应该很容易,它会花费你的时间,因为你的项目很大 – 2011-04-17 17:27:30

+0

这就是主观的问题。是的,这很难,但不,没有太多。 – user422039 2011-04-17 21:41:18

+0

@ user422039 - 我想是的,但这里的答案帮了我很大的忙,当转换时间到来时,我会更好地做好准备。谢谢大家。 – Rosenberg 2011-04-17 22:50:55

回答

28

唯一真正的问题是转换为Unicode。您应该了解在Delphi中如何实现Unicode支持 - 从Marco Cantu开始White Paper: Delphi and Unicode

无法估计在不知道实际代码的情况下将旧应用程序升级到Unicode所需的工作量。如果您以标准方式使用字符串类型,转换将很容易。任何使用字符串类型的低级技巧(比如将二进制数据存储在字符串中)现在都被弃用,并且对应的代码应该被重写。

+1

哇,非常丰富,谢谢! – Rosenberg 2011-04-17 19:01:09

15

一些小工具可以迁移而不需要做任何修改,或者只需要一些unicode修复就可以运行。但是,如果你的代码库像你解释的一样庞大,你就不应该完全依赖这里的任何人告诉你。只需获取XE的副本并加载代码即可。看看你遇到了什么问题,以了解它将要付出的努力量。

在这一刻我已经将我的所有代码移植到XE(甚至是旧项目)。我尽可能多地重复使用相同的库,所以一旦我转换了大部分这些库,将Delphi 7中的应用程序“移植”到Unicode Delphi通常只是处理库中更新接口的重复任务,或者修复编译器错误和警告。

,我已经遇到的最常见错误:

  • Unicode的东西。这将需要90%的时间。如果代码执行很多低级字符串处理,这很烦人,但是通过添加一些类型转换可以轻松解决大多数问题。

  • 当您使用c in ['a'..'z']时,编译器会发生错误。你应该使用CharInSet()作为unicode字符串。

  • 如果设置了ShortDateFormat,则会得到一个编译器警告,您应该使用FormatSettings.ShortDateFormat代替。在新代码中,这是一个好主意。如果你正在移植,如果你只想开始,最初就忽略它。

此外,你可能会升级你的第三方库到更新的版本,所以你不必自己移植那些。对于那些已经改变了界面或工作方式的人来说并不鲜见,所以我会下载一些试用版来看看有什么变化。

+0

谢谢,那么我会面对很多人。我只是在寻找,因为那样我们就不得不购买Delphi XE。 – Rosenberg 2011-04-17 19:36:03

5

我的项目大约有一百万行代码,我最近从CB9移植到XE。为了减少工作量,我首先重写了很多,所以我不再依赖第三方组件包,然后仔细检查所有与字符串相关的(unicode),然后才移动到XE。准备工作很多,实际的端口比较容易。

+0

啊,这是个好主意,我的规模也很大。我面临的最大问题是自定义组件,它们是专门为Delphi 7制作的,它们是常用控件(编辑版本,标签,按钮等)的变体。自定义组件的最大原因是添加一个属性,从sql中读取它们的标题,这是作为本地化度假区实现的,我相信这是一个过时的日期。 – Rosenberg 2011-04-17 19:05:31

+0

根本不会有问题 – 2011-04-17 21:34:52

+0

别担心,Delphi自己的定位技术在D7之后被破坏,直到XE才被修复。在这方面,你没有错过任何新东西。 – 2011-04-18 13:39:13

6

你在你的回复评论中提到了SQL ......你的数据库是否支持unicode?如果没有,你可能会做很多工作。您可能需要即时转换数据库或为您的用户制作转换工具。您可能需要升级数据库,甚至切换到其他位置。例如,DBISAM不支持unicode,但供应商使ElevateDB是。过渡不是微不足道的。还有一些其他类似Hyperstring的库,主要用汇编编写,是另一个痛处。

+0

我正在使用Microsoft SQL Server 2008 SQL_Latin1_General_CP1_CI_AS,我不认为我应该面临与它的问题,我应该吗? – Rosenberg 2011-04-17 19:32:21

+0

您不必强制将数据库更改为Unicode(只要您不需要存储整个Unicode集)。数据库客户端和驱动程序会来回转换,但要小心写出可以毫无损失地转换的内容,只要您使用LATIN1即可。 许多Delphi程序员错过了许多数据库不在应用程序私有控制之下。它们是许多应用程序使用的公司数据,应用程序必须符合数据库设计,而不是反之。 – 2011-04-18 13:35:44

6

我已经做了很多转换。

你应该准备好让你当前的代码基础可测试。最好使用自动化单元测试,但至少有一个好的最终用户测试计划。

然后你应该计划最大的部分:你的应用程序和数据库的Unicode转换。

最后有以下长,但可能非常耗时方面:

  • 如果你使用BDE,这是摆脱它的时候
  • 德尔福XE比Delphi 7中更严格
  • 是撞了好几个版本,而且通常比VCL远不如向后兼容的第三方库的版本是

当你把它移植,现在是时候改变的东西:既然你已经看到了整个代码库,现在你知道你的弱点在哪里,所以你可以开始重构它们并获得比以前更好的应用程序。

0

对于这个MIGRATION执行来说,这绝对是一个挑战。但需要良好的规划!

我们首先需要找到所有可能的组件,这些组件也需要与代码一起移植。如果在Delphi7项目中使用的第三方组件不可用,那么进一步研究它很复杂。其次,与Unicode相关的其他类型转换很容易。 最后,我们需要获得其他支持库,BDE和数据库适配器。

对于丰富的用户界面,可以使用Delphi FireMonkey

Delphi越来越好,因为它现在支持从桌面到Web到移动应用程序的开发。