Migrando a Delphi 2009. Preparandonos para Unicode.

La nueva versión de delphi 2009, trae grandes cambios con todo el tema del unicode. Ahora tanto la RTL como la VCL soportan totalmente unicode. Por lo tanto uno de los cambios es que el tipo "string", pertenece a "UnicodeString" en vez de "AnsiString". "Widestring" aún existe y seguirÔ funcionando, pero si queremos notar las mejoras del reference counting i del Delphi's fast memory manager, debemos sustituir los "WideString" por "UnicodeString". Entonces al declarar una variable de tipo "String", esta proviene de "UnicodeString" y no de "AnsiString" como estÔbamos acostumbrados.

Esta vez al asignar variables "AnsiString" a "WideString" o viceversa, en delphi 2009 obtendremos un warning. Una de las muchas diferencias que tenemos ahora, es que los char no miden 1 byte, sino 2. AsĆ­ que si hacemos SizeOf(Char), este valdrĆ” 2 bytes en vez de 1. Siguiendo esta casuĆ­stica, la longitud de un String ya no es la medida de sus bytes, sino que la cosa ha cambiado un poco.
Si hacemos la llamada Length(String) esta nos crearƔ bastantes problemas, porquƩ ahora para el cƔlculo tendremos que realizar Length(String) * SizeOf(Char).

  • Resumiendo:
  1. String proviene de UnicodeString y no de AnsiString.
  2. WideString no ha cambiado y seguirĆ” funcionando correctamente, pero lo tendrĆ­amos que reemplazar por UnicodeString. WideString lo direcciona windows memory manager.
  3. Char proviene de WideChar y ahora es de 16 bits y no de 8.
  4. Los tipos de 8 bits desaparecen. AnsiChar y AnsiString (de 8 bits), seguirƔn funcionando, pero hay que ir con cuidado al castear, ya que UnicodeString es de 16 bits y si lo asignamos a un AnsiChar o AnsiString perderemos 8 bits. AnsiChar y AnsiString pasan a ser Deprecated.
  5. Para todo el tema de las llamadas API o comunicación con objetos COM, se complica un poco mÔs debido que hay muchas llamadas que quieren la medida de lo que vas a enviar, y si ahora hacemos un SizeOf(String) siempre nos devolverÔ 4 bytes, ya que este és un puntero.
Podemos encontrar mÔs información en los siguientes enlaces:

Codegear Delphi 2009 - What's new.
Micro-ISV.asia.

Comments