WideString与Delphi 2009中的String相同

时间:2008-12-17 12:49:38

标签: delphi unicode delphi-2009

我得到了一些奇怪的行为,在2009年重新编译了一些在不同点使用宽带的应用程序。

在Delphi 2009 App中,Widestring与String相同吗?

4 个答案:

答案 0 :(得分:27)

不,他们不是非政治性的。

WideString只是ActiveX / COM BSTR类型的包装器。在ActiveX / COM中使用字符串时需要它。

Delphi 2009及更高版本中的

StringUnicodeString的别名,它可以保存Unicode字符,就像BSTR一样,但它与WideString不同。 WideString由COM内存管理器分配,不进行引用计数。 UnicodeString由RTL内存管理器分配,并且被引用计数,就像AnsiString一样。

您应尽可能使用(Unicode)String,并仅将WideString用于COM互操作,或使用WideString处理Unicode支持的旧库。

答案 1 :(得分:7)

似乎答案是here

  

Delphi 2009中最引人注目的变化是“string”类型现在是UnicodeString的别名而不是AnsiString。

答案 2 :(得分:6)

另一个需要注意的重要事项是性能差异。

在Marco Cantu的白皮书(在moodforaday的回答中提到)中说:

  

“WideString是(现在仍然)没有引用计数,在性能和灵活性方面极差(例如,它使用Windows全局内存分配器而不是本机FastMM4)。”

几乎所有Delphi 2009升级指南我都建议您将所有WideStrings转换为字符串。

答案 3 :(得分:4)

请参阅Marco Cantu撰写的这篇论文,其中概述了Delphi 2009中字符串(即UnicodeString)的工作原理:

“白皮书:Delphi和Unicode”

http://dn.codegear.com/article/38980

基本上,这就是罗迪所说的,但需要27页才能详细说明。