Is WideString identical to String in Delphi 2009

一曲冷凌霜 提交于 2019-12-18 14:52:23

问题


I'm getting some weird behaviour recompiling some applications in 2009 that used widestrings at various points.

In a Delphi 2009 App is Widestring identical to String?


回答1:


No, they are not idenitical.

WideString is just a wrapper for the ActiveX/COM BSTR type. You need it when working with with strings in ActiveX/COM.

String in Delphi 2009 and later is an alias for UnicodeString, which can hold Unicode characters, just like BSTR does, but it's NOT the same as WideString. WideString is allocated by the COM memory manager, and is not reference counted. UnicodeString is allocated by the RTL memory manager, and is reference counted, just like AnsiString is.

You should use (Unicode)String wherever possible, and only use WideString for COM interop, or dealing with legacy libraries that use WideString for Unicode support.




回答2:


It seems the answer is here:

The most dramatic change in Delphi 2009 is that the “string” type is now an alias for UnicodeString instead of AnsiString.




回答3:


One other important thing to note is the performance difference.

In Marco Cantu's White Paper (referred to in moodforaday's answer) says:

"WideString was (and still is) not reference counted and is extremely poor in terms of performance and flexibility (for example, it uses the Windows global memory allocator rather than the native FastMM4)."

Almost every upgrade guide for Delphi 2009 I've seen recommends you convert all WideStrings to Strings.




回答4:


See this paper by Marco Cantu which outlines the workings of string (i.e. UnicodeString) in Delphi 2009:

"White Paper: Delphi and Unicode"

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

Basically, it's what Roddy said, but takes 27 pages to go into detail.



来源:https://stackoverflow.com/questions/374446/is-widestring-identical-to-string-in-delphi-2009

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!