我想将几个大型应用程序从Delphi 2006移植到XE。原因不在于使用Unicode,而是为了利用(希望)更好的IDE稳定性,本地PNG支持,更多组件,更少的VCL bug,更少依赖第三方的东西,减少对你们的影响等。的应用程序可能受益于Unicode,但目前这不是问题。目前我只想采取最直接的方法让他们再次编译。作为开始,我已经将所有含糊不清的字符串声明,即字符串改为AnsiString或ShortString,将字符串改为AnsiChar,并将pChar改为pAnsiChar,然后用D2006重新编译。到现在为止还挺好。没有什么破坏将Delphi 2006应用程序移植到XE
我的问题是:从哪里来?假设我只是向XE编译器提供消息来源并点亮触摸纸,那么可能是什么问题呢?
例如,
var
S : AnsiString ;
...
MainForm.Caption := S ;
这是否会产生一个错误?一个警告?我假设VCL现在是Unicode,还是将XE拉入非Unicode组件,或者转换字符串?在XE中保留使用8位字符串的应用程序实际上是否可行?还是会有太多令人头痛的问题?
如果最好的/最简单的方法是Unicode,我会这样做,即使我不会使用扩展字符,至少在不久的将来。
我想知道的另一件事是第三方的东西。我想我需要获得与XE兼容的更新版本。
任何(肯定!)评论赞赏。
谢谢@Remy。从全球范围的'AnsiString'回到'String'没什么大不了的(FART是一个很棒的工具)。有合理数量的代码需要并采用字节大小的ASCII字符串。如果我将所有声明都还原为“字符串”,则XE将假定UnicodeString。当我编写类似'if(S [3] =':')然后...'的代码时它会警告我吗?这是我不想忽视的情况。 – rossmcm
'':'是字符文字。字符文字和字符串文字现在是上下文相关的。当与'UnicodeString'使用的,将文字是Unicode(在'#XX' 2位数中的'#的范围内字面的特定情况下80'-'#FF',其Unicode表示是由新的影响'HIGHCHARUNICODE'编译器指令)。 'String','Char'和'PChar'现在都是Unicode。如果'S'是一个'UnicodeString',那么你将比较'WideChar'和'WideChar'。如果'S'是'AnsiString',那么你会比较'AnsiChar'和'AnsiChar'。在这两种情况下,都不需要编译器警告。 –
好的。 @Remy我的观点是,如果我有现有的代码:'var S:string;开始S:='你好'; Writeln(SomeTextFile,S);'和文件需要8位ASCII和包含字节'$ 68 $ 65 $ 6C,$ 6C,$ 5F,$ 0D,$ 0A'后代码执行时,XE编译器不会警告我会将S视为Unicode而不是Asni,并且文件内容将会不同(并且错误)?我理解正确吗? – rossmcm