Is WideString identical to String in Delphi 2009

delphi, delphi-2009, unicode

Solution

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.

Problem

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?

Original source