我在2009年重新编译了一些在不同点使用宽带的应用程序.
在Delphi 2009 App中,Widestring与String相同吗?
不,他们不是非政治性的.
WideString
只是ActiveX/COM BSTR
类型的包装器.在ActiveX/COM中使用字符串时需要它.
String
在Delphi 2009及更高版本中是一个别名UnicodeString
,它可以保存Unicode字符,就像BSTR
它一样,但它不一样WideString
.WideString
由COM内存管理器分配,不参考计数. UnicodeString
由RTL内存管理器分配,并且被引用计数,就像AnsiString
是.
您应该(Unicode)String
尽可能使用,并且仅WideString
用于COM互操作,或处理WideString
用于Unicode支持的旧库.
似乎答案在这里:
Delphi 2009中最引人注目的变化是"string"类型现在是UnicodeString的别名而不是AnsiString.
另一个需要注意的重要事项是性能差异.
在Marco Cantu的白皮书(在moodforaday的答案中提到)说:
"WideString是(现在仍然)没有引用计数,在性能和灵活性方面极差(例如,它使用Windows全局内存分配器而不是本机FastMM4)."
几乎所有Delphi 2009的升级指南我都建议您将所有WideStrings转换为字符串.