我得到了一些奇怪的行为,在2009年重新编译了一些在不同点使用宽带的应用程序。
在Delphi 2009 App中,Widestring与String相同吗?
答案 0 :(得分:27)
不,他们不是非政治性的。
WideString
只是ActiveX / COM BSTR
类型的包装器。在ActiveX / COM中使用字符串时需要它。
String
是UnicodeString
的别名,它可以保存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页才能详细说明。