Tengo un comportamiento extraño que recompila algunas aplicaciones en 2009 que usaron varias cadenas en varios puntos.Es WideString idéntico a String en Delphi 2009
En una aplicación Delphi 2009, ¿la cadena es idéntica a la cadena?
Tengo un comportamiento extraño que recompila algunas aplicaciones en 2009 que usaron varias cadenas en varios puntos.Es WideString idéntico a String en Delphi 2009
En una aplicación Delphi 2009, ¿la cadena es idéntica a la cadena?
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.
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.
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.
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.