Confidencial de WindowsLos iconos de 16 bits están muy pasados de moda

Raymond Chen

Como comenté en la columna Confidencial de Windows de febrero de 2008, las características desaparecen de Windows®. Normalmente desaparecen de forma lenta y prácticamente imperceptible y, cada vez que esto ocurre, un equipo de producto celebra discretamente la ocasión. Otra característica que desapareció de Windows Vista® es la capacidad del código de 32 bits de tener acceso a iconos almacenados en módulos de 16 bits, en su mayoría archivos EXE y DLL de 16 bits.

Antes de ponerse nervioso, tenga en cuenta que el código de 16 bits puede tener acceso a iconos almacenados en módulos de 16 bits sin problemas; que todo sucede dentro de la capa de emulación de 16 bits. Lo que ha desaparecido es la capacidad de tener acceso a esos iconos desde código de 32 bits. Más específicamente, la capacidad de las funciones de extracción de iconos de 32 bits, como la función ExtractIcon, para cargar esos iconos a partir de una DLL de 16 bits.

El código de 32 bits que extrae iconos de módulos de 16 bits no usa funciones del kernel como FindResource para localizar el icono en el archivo. En su lugar, el código debe implementar su propio cargador, que analiza el encabezado del módulo de 16 bits, busca la tabla de recursos y, a continuación, la analiza en busca del recurso de icono deseado. Hasta que se realicen todas estas acciones, el código de 32 bits no convertirá los píxeles en un icono.

  (Hacer clic en la imagen para ampliarla)

Como se imaginará, el código que hace esto es muy antiguo y frágil. Hay muchas posibilidades de error al analizar código binario que podría dañarse, ya sea por error o de forma malintencionada. El equipo de rendimiento pedirá cambios en la manera de abrir los archivos para mejorar su rendimiento en redes, puesto que las diferentes formas de abrir y compartir tienen diferentes consecuencias en términos de almacenamiento en caché de la red. Y el equipo de confiabilidad puede pedir que se vuelva a escribir el código de análisis para evitar el uso de archivos asignados en memoria. A la larga, el costo de mantener esta clase de código empieza a superar el valor que ofrecía. No, en serio, ¿quién sigue escribiendo programas de 16 bits?

Los programas de 16 bits seguirán funcionando mientras disponga de la capa de emulación de 16 bits. (Sí, la aplicación Windows Vista de 64 bits no tiene una capa de emulación de 16 bits, pero esto no supone un paso atrás con respecto a Windows XP, ya que la aplicación Windows XP de 64 bits tampoco tenía una capa de emulación de 16 bits. No se mejoró, pero tampoco se empeoró).

Lo único que pierde en Windows Vista es la capacidad de usar ExtractIcon desde el programa de 32 bits y obtener un icono a partir de una DLL de 16 bits. Si tiene un acceso directo a un programa de 16 bits en el menú Inicio, el icono de ese acceso directo se mostrará como un icono de programa genérico, puesto que el Explorador de Windows ya no puede extraer el icono de programas de 16 bits del archivo EXE principal. No es una gran pérdida. Pero, si esto realmente le molesta, puede editar las propiedades del acceso directo y darle un icono de un módulo de 32 bits.

El único lugar donde la desaparición de esta característica supone un problema es en las bibliotecas de iconos creadas por una herramienta de edición de iconos determinada. Por alguna razón, el programa guarda de forma predeterminada los iconos como recursos en archivos DLL de 16 bits, de modo que usted ya no puede tener acceso a esos iconos desde código de 32 bits. Por supuesto, la solución alternativa consiste en volver a guardar esas bibliotecas de iconos como recursos en archivos DLL de 32 bits.

Estoy seguro de que alguien escribirá, si no lo ha hecho ya, un pequeño programa para extraer todos los iconos de una DLL de 16 bits y crear un archivo DLL de 32 bits de recursos con esos iconos, de modo que las personas que tienen iconos viejos en archivos DLL de 16 bits puedan continuar usándolos en accesos directos del menú Inicio. Aunque debo admitir que, si alguien escribe este programa, probablemente no encontrará a nadie que realmente lo necesite. El número de solicitudes de un programa de este tipo que ha llegado al equipo de interfaz de usuario de Windows es cero.

Raymond Chen, The Old New Thing, y en su libro homónimo se trata la historia de Windows y la programación Win32. Raymond evita las puertas que se cierran.

© 2008 Microsoft Corporation and CMP Media, LLC. Reservados todos los derechos; queda prohibida la reproducción parcial o total sin previa autorización.