1

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

作为开始,我已经改变了所有不明确的字符串声明,即字符串到 AnsiString 或 ShortString,char 到 AnsiChar 和 pChar 到 pAnsiChar,并用 D2006 重新编译。到目前为止,一切都很好。什么都没坏。

我的问题是:从这里到哪里?假设我只是向 XE 编译器展示我的源代码并点亮触摸纸,那么可能是什么大问题?

例如,

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

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

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

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

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

4

2 回答 2

1

It is a long jump taking 2006 to 2011

But it is possible if you consider that:

  • You have to convert String variables using the new conversions methods ;
  • You have to check all the versions between 2006 and xe to know how the libraries have changed, bacause some have been spplited, others merged, and a few deleted ;
  • You have to buy/download the upgrade (if any) of your 3rd party components.
于 2012-06-30T00:41:47.623 回答
0

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

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

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

于 2012-05-22T17:34:55.757 回答