2008-12-17 9 views

Respuesta

26

No, no son ideníticas.

WideString es simplemente un contenedor para el tipo ActiveX/COM BSTR. Lo necesita cuando trabaja con cadenas en ActiveX/COM.

String en Delphi 2009 y más tarde es un alias para UnicodeString, que puede contener caracteres Unicode, al igual que BSTR hace, pero no es lo mismo que WideString. WideString es asignado por el administrador de memoria COM, y no se cuenta la referencia. UnicodeString es asignado por el administrador de memoria RTL, y se cuenta la referencia, al igual que AnsiString es.

Debe utilizar (Unicode)String siempre que sea posible, y sólo usar WideString para la interoperabilidad COM, o hacer frente a las bibliotecas heredadas que utilizan WideString para el soporte Unicode.

7

Parece que la respuesta es here:

El cambio más dramático en Delphi 2009 es que el tipo “cadena” es ahora un alias para UnicodeString en lugar de AnsiString.

4

Ver este documento por Marco Cantu que describe el funcionamiento de la cadena (es decir UnicodeString) en Delphi 2009:

"Libro Blanco: Delphi y Unicode"

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

Básicamente, es lo que dijo Roddy, pero lleva 27 páginas para entrar en detalles.

6

Otra cosa importante a tener en cuenta es la diferencia de rendimiento.

En el Libro Blanco de Marco Cantu (se hace referencia en la respuesta de moodforaday) dice:

"WideString era (y sigue siendo) no hacen referencia a contados y es extremadamente pobre en términos de rendimiento y flexibilidad (por ejemplo, utiliza el asignador de memoria global de Windows en lugar del FastMM4 nativo).

Casi todas las guías de actualización para Delphi 2009 He visto que recomienda convertir todas las cadenas anchas en cadenas.

Cuestiones relacionadas