Идентичен ли WideString String в Delphi 2009

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

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


person Toby Allen    schedule 17.12.2008    source источник


Ответы (4)


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

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

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

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

person Roddy    schedule 17.12.2008


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

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

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

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

person lkessler    schedule 17.12.2008

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

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

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

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

person Marek Jedliński    schedule 17.12.2008