gpt4 book ai didi

Delphi WideString 和 Delphi 2009+

转载 作者:行者123 更新时间:2023-12-03 14:37:45 25 4
gpt4 key购买 nike

我正在编写一个类,它将宽字符串保存到二进制文件中。我正在使用 Delphi 2005,但该应用程序稍后将移植到 Delphi 2010。我在这里感到非常不确定,有人可以确认一下吗:

  1. Delphi 2005 WideString 与 Delphi 2010 String完全类型相同

  2. Delphi 2005 WideString 字符以及 Delphi 2010 String 字符的大小保证始终为 2 个字节。

有了所有 Unicode 格式,我不想遇到字符串中的某个字符突然变成 3 个字节宽或类似的情况。

编辑:发现:“我确实说的是UnicodeString,而不是WideString。WideString仍然存在,并且没有改变。WideString是由Windows内存管理器分配的,应该用于交互与 COM 对象。WideString 直接映射到 COM 中的 BSTR 类型。” at http://www.micro-isv.asia/2008/08/get-ready-for-delphi-2009-and-unicode/

现在我更困惑了。那么 Delphi 2010 WideString 与 Delphi 2005 WideString 不一样吗?我应该使用 UnicodeString 来代替吗?

编辑 2:Delphi 2005 中没有 UnicodeString 类型。FML。

最佳答案

对于你的第一个问题:WideString与D2010的string类型不完全相同。 WideString 与一直以来都是相同的 COM BSTR 类型。它由 Windows 管理,没有引用计数,因此每次您将 BSTR 传递到某个地方时,它都会生成整个 BSTR 的副本。

UnicodeString 是 D2009 及以后版本中默认的 string 类型,基本上是我们都知道的 AnsiString 的 UTF-16 版本和爱。它有一个引用计数并由 Delphi 编译器管理。

对于第二个,默认的 char 类型现在是 WideChar,它们与 WideString 中一直使用的字符相同。它是 UTF-16 编码,每个字符 2 个字节。如果将 WideString 数据保存到文件中,则可以毫无问题地将其加载到 UnicodeString 中。这两种类型之间的差异与内存管理有关,而不是数据格式。

关于Delphi WideString 和 Delphi 2009+,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4096666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com