将Delphi 2006应用程序移植到XE

时间:2012-05-22 02:25:49

标签: unicode delphi-xe porting delphi-2006 ansistring

我想将几个大型应用程序从Delphi 2006移植到XE。原因不是与Unicode有关,而是利用(希望)更好的IDE稳定性,原生PNG支持,更多组件,更少的VCL错误,更少依赖第三方的东西,减少你们的支持等等。应用程序可能会受益于Unicode,但目前这不是一个问题。目前我只想采取最直接的方式让他们再次编译。

首先,我更改了所有不明确的字符串声明,即字符串为AnsiString或ShortString,char为AnsiChar,pChar为pAnsiChar,并使用D2006重新编译。到现在为止还挺好。什么都没破。

我的问题是:从哪里来?假设我只是将我的源代码提供给XE编译器并点亮触摸纸,那么可能是什么大问题?

例如,

var
    S : AnsiString ; 
...
MainForm.Caption := S ;

这会产生错误吗?一个警告?我假设VCL现在是Unicode,或者XE会引入非Unicode组件,还是转换字符串?事实上,在XE中使用8位字符串保留应用程序是否可行,或者会有太多令人头疼的问题?

如果最好/最简单的方法是使用Unicode,我会这样做,即使我不会使用扩展字符,至少在不久的将来也是如此。

我想知道的另一件事是第三方的东西。我想我需要获得与XE兼容的更新版本。

任何(积极的!)评论赞赏。

2 个答案:

答案 0 :(得分:1)

这是2006年至2011年的跳远

但如果您考虑到这一点,就有可能:

  • 您必须使用新的转换方法转换字符串变量;
  • 您必须检查2006和xe之间的所有版本,以了解库是如何更改的,因为有些版本已被删除,其他版本已合并,还有一些已删除;
  • 您必须购买/下载第三方组件的升级(如果有)。

答案 1 :(得分:0)

VCL现在完全是Unicode,因此您显示的代码会生成关于从AnsiStringUnicodeString的隐式转换的编译器警告,而不是错误。如果AnsiString包含非ASCII字符(编译器无法验证),那么这是一种潜在的有损转换。如果继续使用AnsiString,则必须进行显式类型转换以避免警告:

var
  S : AnsiString ; 
...
MainForm.Caption := String(S);

你最好不要像这样解释你的代码。拥抱Unicode。您的代码将更易于管理,并且对于未来的版本和平台将更易于管理。您应该将AnsiString用法限制在实际需要Ansi的地方 - 网络通信,旧数据的文件I / O等。如果您想在应用程序中保存内存,特别是如果您只使用ASCII字符,使用UTF8String代替AnsiString。 UTF-8是Unicode的8位编码,UTF8StringUnicodeString之间的转换是无损的,没有编译器警告。