Delphi 2009中的WideString和String是否相同?

14

我在重新编译一些在2009年使用widestring的应用程序时,遇到了一些奇怪的行为。

在Delphi 2009应用程序中,Widestring和String是相同的吗?

4个回答

29

不,它们不相同。

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

Delphi 2009及其后续版本中的StringUnicodeString的别名,可以像BSTR一样保持Unicode字符集,但它与WideString不同。 WideString由COM内存管理器分配,而且没有引用计数。 UnicodeString由RTL内存管理器分配,像AnsiString一样引用计数。

应尽可能使用(Unicode)String,仅在进行COM互操作或处理使用WideString支持Unicode的旧库时才使用WideString


7

看起来答案在这里

Delphi 2009最显著的变化是,“string”类型现在是UnicodeString的别名,而不再是AnsiString。


6

还有一件重要的事情需要注意,那就是性能差异。

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

"WideString没有引用计数,极其性能和灵活性差(例如,它使用Windows全局内存分配器而不是本地FastMM4)。"

我看到的几乎所有Delphi 2009的升级指南都建议将所有WideStrings转换为Strings。


4

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

“白皮书:Delphi和Unicode”

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

基本上,这就是Roddy所说的,但需要27页来详细说明。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接