代码之家  ›  专栏  ›  技术社区  ›  Toby Allen mercator

宽字符串与Delphi2009中的字符串相同吗?

  •  13
  • Toby Allen mercator  · 技术社区  · 16 年前

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

    在Delphi2009应用程序中,wideString与string相同吗?

    4 回复  |  直到 16 年前
        1
  •  26
  •   Remy Lebeau    7 年前

    不,他们不是思想上的。

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

    String 在Delphi2009及更高版本中是 UnicodeString ,可以保存Unicode字符,就像 BSTR 是的,但它与 宽字符串 . 宽字符串 由COM内存管理器分配,不进行引用计数。 单列字符串 由RTL内存管理器分配,并对引用进行计数,就像 AnsiString 是。

    你应该使用 (Unicode)String 尽可能使用 宽字符串 用于COM互操作,或处理使用 宽字符串 用于Unicode支持。

        2
  •  7
  •   haggai_e    16 年前

    答案似乎是 here :

    Delphi2009中最引人注目的变化是,字符串类型现在是unicodestring的别名,而不是ansistring。

        3
  •  6
  •   lkessler    16 年前

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

    在马可·坎图的白皮书中(在穆德沃拉德的回答中提到)说:

    WideString没有被引用计数,而且在性能和灵活性方面非常差(例如,它使用的是Windows全局内存分配器,而不是本机fastmm4)。

    几乎所有Delphi2009的升级指南都建议您将所有宽字符串转换为字符串。

        4
  •  4
  •   Marek Jedliński    16 年前

    参见Marco Cantu的论文,该论文概述了Delphi 2009中字符串(即unicodeString)的工作原理:

    “白皮书:Delphi和Unicode”

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

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