[ contenidos | #winprog ]

Notas sobre Archivos de Recursos

Argh!

La única cosa que realmente odiaba cuando cambié mi entorno de programación, de Borland C++ a MS VC++, fué la forma en que VC++ maneja los scripts de recursos (archivos.rc).

En Borland C++ era libre de controlar la disposición y el contenido de los archivos .rc y cuando usaba el editor de recursos, sólo las cosas que yo específicamente cambiaba eran cambiadas en el archivo. En cambio, el editor de recursos de VC++, reescribe completamente el archivo .rc y posiblemente destruye o ignora los cambios que personalmente realizo.

En un principio esto fué terriblemente frustrante, pero básicamente he aprendido a trabajar con él y después de todo no es TAN malo, debido a que, en general no escribo tanta cantidad de recursos a mano, salvo aquellos con cambios menores que quizás no pueden realizarse por completo en el editor de recursos.

Compatibilidad

Un pequeño cambio que se hizo en este tutorial fué lograr que los archivos de recursos compilen de forma correcta bajo VC++ y BC++ sin realizar cambios. En el tutorial original he usado la convención de nombres para los encabezados de recursos utilizada por Borland, la cual era nombre_proyecto.rh. Sin embargo, por default, en VC++ este encabezado SIEMPRE es llamado resource.h, por lo tanto por simplicidad he adoptado este último para la revisión actual del tutorial que no impacta en BC++ (no del todo).

Para los curiosos, es posible cambiar el nombre del recurso que usa VC++ editando manualmente el archivo .rc y cambiando el nombre en dos lugares, primero donde es inlcuído (#include) y segundo en el recurso TEXTINCLUDE donde está contenido.

El segundo problema es que, por default, VC++ requiere que sea incluído dentro del archivo de recursos el archivo afxres.h , mientras que BC++ tiene todas las macros del preprocesador que se necesitan, definidas de forma automática y por lo tanto no requiere dicha inclusión. Otra cosa asombrosa es que afxres.h solo es instalado si instalas MFC, lo cual no todo el mundo hace, aún cuando estás creando una aplicación API la cuál solo requiere winres.h, que siempre es instalada.

Debido a que he trabajado con VC++ y he usado su editor de recursos, pude resolver este problema alterando ligeramente cada archivo .rc incluyendo lo siguiente:

#ifndef __BORLANDC__
#include "winres.h"
#endif

Lo cual bajo circunstancias normales prodría leerse:

#include "afxres.h"
Para aquellos que están usando VC++ pueden encontrar la opción de cambiar este texto dentro del IDE através de "View > Resource Includes". Generalmente, en la práctica normal, no hay necesidad de hacer siempre esto, sólo es una forma que he usado para solucionar el problema de trabajar con VC++ y BC++ al mismo tiempo.

Para aquellos que usan BC++, pido disculpas por toda la basura que es generada por el editor de recursos de VC++, pero no puedo hacer nada al respecto.

Compilación de Recursos bajo BC++

Por mas que lo intente no puedo encontrar una forma simple de compilar un programa en BC++ que incluya archivos RC y últimamente tuve que configurarlo en una configuración no-óptima que encontrarás en los archivos "make" incluídos con el código fuente de este tutorial. Puedes encontrar notas sobre el compilador de BC++ en Free Borland C++ Command Line Tools.
Copyright © 1998-2003, Brook Miles (
theForger). All rights reserved.

Versión en Español: Federico Pizarro - 2003