将项目从Delphi 7迁移到Delphi XE有多难?

Ros*_*erg 34 delphi delphi-7 delphi-2010 delphi-xe

我们公司有一个已经开发了十多年的软件,因此有一些真正过时的东西.它仍然非常实用,但是我看到了Delphi XE的新功能,它让我想切换.问题是源代码本身超过300mb的.pas文件(总共1gb与组件等).

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

如果我决定从Delphi 7迁移到Delphi XE,我有多难以期待事情发生?

谢谢.

klu*_*udg 29

唯一真正的问题是转换为Unicode.您应该了解如何在Delphi中实现Unicode支持 - 从Marco Cantu 白皮书:Delphi和Unicode开始

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


Wou*_*ick 15

一些小工具要么不需要进行任何修改就可以迁移,或者只需要几个unicode修复就可以运行它.

但是,如果您的代码库与您解释的一样庞大,那么您不应该完全依赖于此处的任何人告诉您的内容.只需获取XE的副本并加载代码即可.看看你遇到了什么问题,以了解它将花费多少努力.

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

我遇到的最常见的错误:

  • Unicode的东西.这将花费90%的时间.如果代码执行了大量的低级字符串处理,这很烦人,但是通过添加一些类型转换可以很容易地修复大多数问题.

  • 你使用时编译器婊子c in ['a'..'z'].你应该CharInSet()用于unicode字符串.

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

此外,您可能会将第三方库升级到较新版本,因此您无需自行移植.那些改变他们的界面或工作的人并不罕见,所以我下载了一些试用版本以查看已经改变的内容.


Chr*_*ton 6

您在其中一条响应注释中提到了SQL ...您的数据库是否支持unicode?如果没有,你可能会参与很多工作.您可能需要即时转换数据库或为您的用户制作转换工具.您可能需要升级数据库,甚至切换到其他内容.例如,DBISAM不支持unicode,但供应商生产ElevateDB.过渡并非微不足道.而其他一些像Hyperstring这样主要用汇编语言编写的库是另一个痛处.


Jer*_*ers 6

我一直在做很多转换.

您应该通过使您当前的代码库可测试来做好准备.最好使用自动化单元测试,但至少要有一个好的最终用户测试计划.

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

最后,主要的,但可能非常耗时的方面:

  • 如果你正在使用BDE,那么现在是摆脱它的时候了
  • Delphi XE比Delphi 7更严格
  • 第三方库版本提升了很多版本,通常远远低于VCL的向后兼容性

当你移植它时,是时候改变一些事情:因为你已经看到了整个代码库,现在你知道你的弱点在哪里,所以你可以开始重构它们并获得比以前更好的应用程序.


Mik*_*eeg 5

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