13

我在 2009 年重新编译一些在不同点使用宽字符串的应用程序时遇到了一些奇怪的行为。

在 Delphi 2009 应用程序中 Widestring 与 String 相同吗?

4

4 回答 4

27

不,它们不相同。

WideString只是 ActiveX/COMBSTR类型的包装器。在 ActiveX/COM 中处理字符串时需要它。

String在 Delphi 2009 及更高版本中是 . 的别名UnicodeString,它可以包含 Unicode 字符,BSTR就像WideString. WideString由 COM 内存管理器分配,不计入引用。 UnicodeString由 RTL 内存管理器分配,并且是引用计数的,就像AnsiStringis。

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

于 2008-12-17T12:55:11.323 回答
7

似乎答案就在这里

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

于 2008-12-17T12:56:06.000 回答
6

另一件需要注意的重要事情是性能差异。

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

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

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

于 2008-12-17T20:48:36.267 回答
4

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

“白皮书:Delphi 和 Unicode”

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

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

于 2008-12-17T20:20:52.657 回答