Является ли WideString идентичным String в Delphi 2009? - PullRequest
13 голосов
/ 17 декабря 2008

Я получаю странное поведение, перекомпилируя некоторые приложения в 2009 году, которые использовали широкие строки в различных точках.

В приложении Delphi 2009 ли Widestring идентичен String?

Ответы [ 4 ]

27 голосов
/ 17 декабря 2008

Нет, они не идентичны.

WideString - это просто оболочка для типа ActiveX / COM BSTR. Это необходимо при работе со строками в ActiveX / COM.

String в Delphi 2009 и более поздних версиях - это псевдоним для UnicodeString, который может содержать символы Unicode, как BSTR, но это НЕ то же самое, что WideString. WideString выделяется диспетчером памяти COM и не считается счетчиком. UnicodeString выделяется диспетчером памяти RTL и подсчитывается, как AnsiString.

Вы должны использовать (Unicode)String везде, где это возможно, и использовать WideString только для COM-взаимодействия или иметь дело с устаревшими библиотеками, которые используют WideString для поддержки Unicode.

7 голосов
/ 17 декабря 2008

Кажется, ответ здесь :

Наиболее существенное изменение в Delphi 2009 заключается в том, что тип «string» теперь является псевдонимом UnicodeString вместо AnsiString.

6 голосов
/ 17 декабря 2008

Еще одна важная вещь, которую следует отметить, - это разница в производительности.

В Белой книге Марко Канту (упоминаемой в ответе moodforaday) говорится:

"WideString не был (и остается) не учитывается при подсчете ссылок и крайне плох с точки зрения производительности и гибкости (например, он использует распределитель глобальной памяти Windows, а не собственный FastMM4)."

Практически во всех руководствах по обновлению Delphi 2009, которые я видел, рекомендуется преобразовывать все WideStrings в строки.

4 голосов
/ 17 декабря 2008

См. Этот документ Марко Канту, в котором описывается работа со строкой (т.е. UnicodeString) в Delphi 2009:

"Белая книга: Delphi и Unicode"

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

По сути, это то, что сказал Родди, но для подробностей требуется 27 страниц.

...