我想将几个大型应用程序从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兼容的更新版本。
任何(积极的!)评论赞赏。
答案 0 :(得分:1)
这是2006年至2011年的跳远
但如果您考虑到这一点,就有可能:
答案 1 :(得分:0)
VCL现在完全是Unicode,因此您显示的代码会生成关于从AnsiString
到UnicodeString
的隐式转换的编译器警告,而不是错误。如果AnsiString
包含非ASCII字符(编译器无法验证),那么这是一种潜在的有损转换。如果继续使用AnsiString
,则必须进行显式类型转换以避免警告:
var
S : AnsiString ;
...
MainForm.Caption := String(S);
你最好不要像这样解释你的代码。拥抱Unicode。您的代码将更易于管理,并且对于未来的版本和平台将更易于管理。您应该将AnsiString
用法限制在实际需要Ansi的地方 - 网络通信,旧数据的文件I / O等。如果您想在应用程序中保存内存,特别是如果您只使用ASCII字符,使用UTF8String
代替AnsiString
。 UTF-8是Unicode的8位编码,UTF8String
和UnicodeString
之间的转换是无损的,没有编译器警告。