Compartir a través de


TN035: Uso de varios archivos de recursos y archivos de encabezado con Visual C++

Nota:

La nota técnica siguiente no se ha actualizado desde que se incluyó por primera vez en la documentación en línea. Como resultado, algunos procedimientos y temas podrían estar obsoletos o ser incorrectos. Para obtener información más reciente, se recomienda buscar el tema de interés en el índice de la documentación en línea.

Esta nota describe cómo el editor de recursos de Visual C++ permite compartir varios archivos de recursos y archivos de encabezado en un solo proyecto o entre varios proyectos y cómo se puede aprovechar esa característica. Esta nota responde a estas preguntas:

  • Cuándo se podría desear dividir un proyecto en varios archivos de recursos o archivos de encabezado y cómo se hace

  • Cómo se comparte un archivo de encabezado .H común entre dos archivos .RC

  • Cómo se dividen recursos de proyecto en varios archivos .RC

  • Cómo administra el usuario (y las herramientas) las dependencias de compilación entre archivos .RC, .CPP y .H

Debe tener en cuenta que si agrega un archivo de recursos adicional al proyecto, ClassWizard no reconocerá los recursos en el archivo agregado.

Esta nota está estructurada para responder a las preguntas anteriores de la manera siguiente:

  • En Información general sobre cómo administra Visual C++ archivos de recursos y archivos de encabezado se proporciona información general sobre cómo el comando de inclusión de conjuntos de recursos de Visual C++ permite usar archivos de recursos y archivos de encabezado en el mismo proyecto.

  • En Análisis de archivos .RC y .H creados mediante AppWizard se examinan los diversos archivos de recursos y encabezado usados por una aplicación creada mediante AppWizard. Estos archivos son un buen modelo para los archivos de recursos y de encabezado adicionales que puede agregar al proyecto.

  • En Inclusión de archivos de encabezado adicionales se describe dónde podría incluir los archivos de encabezado y se proporcionan detalles de cómo hacerlo.

  • En Uso compartido de un archivo de encabezado entre dos archivos .RC se muestra cómo se puede compartir un archivo de encabezado entre varios archivos .RC de diferentes proyectos o, posiblemente del mismo proyecto.

  • En Uso de varios archivos de recursos en el mismo proyecto se describe dónde podría dividir el proyecto en varios archivos .RC y se proporcionan detalles sobre cómo hacerlo.

  • En Cumplimiento de archivos de Visual C++ no editables se describe cómo puede asegurarse de que Visual C++ no modifique ni cambie involuntariamente el formato de un recurso personalizado.

  • En Administración de símbolos compartidos por varios archivos .RC editados por Visual C++ se describe cómo compartir los mismos símbolos entre varios archivos .RC y cómo evitar asignar valores numéricos de identificador duplicados.

  • En Administración de dependencias entre archivos .RC, .CPP y .Hse describe cómo Visual C++ evita la recompilación innecesaria de archivos .CPP que dependen de archivos de símbolos de recursos.

  • En Cómo administra Visual C++ la información de inclusión establecida se proporcionan detalles técnicos sobre cómo realiza Visual C++ el seguimiento de varios archivos .RC (anidados) y varios archivos de encabezado incluidos con un archivo .RC.

Información general sobre cómo administra Visual C++ archivos de recursos y archivos de encabezado

Visual C++ administra un único archivo de recursos .RC y un archivo de encabezado .H correspondiente como un par de archivos estrechamente acoplado. Al modificar y guardar los recursos en un archivo .RC, indirectamente edita y guarda símbolos en el archivo .H correspondiente. Aunque puede abrir y editar varios archivos .RC al mismo tiempo (mediante la interfaz de usuario MDI de Visual C++) para cualquier archivo .RC, de manera indirecta se edita exactamente un archivo de encabezado correspondiente.

Cuadro de diálogo de archivos de inclusión de recursos de la vista de recursos

Para acceder a Archivos de inclusión de recursos, abra la Vista de recursos y haga clic con el botón derecho en el archivo .RC y seleccione Archivos de inclusión de recursos.

Archivo de encabezado de símbolos

De manera predeterminada, Visual C++ siempre asigna el nombre RESOURCE.H al archivo de encabezado correspondiente, sin importar el nombre del archivo de recursos (por ejemplo, MYAPP.RC). La sección Archivo de encabezado de símbolos: del cuadro de diálogo Archivos de inclusión de recursos en Visual C++, le permite cambiar el nombre de este archivo de encabezado. Escriba un nuevo nombre de archivo en el cuadro de edición de la sección.

Nota:

Los archivos de recursos no se encuentran en el mismo directorio ya que el archivo .RC debe anteponer una ruta de acceso relativa con el carácter "\" de escape para que se lea correctamente.

Directivas de símbolos de solo lectura

Aunque Visual C++ solo edita un archivo de encabezado para cualquier archivo .RC dado, Visual C++ admite referencias a símbolos definidos en archivos de encabezado de solo lectura adicionales. La sección Directivas de símbolos de solo lectura del cuadro de diálogo Archivos de inclusión de recursos le permite especificar cualquier número de archivos de encabezado de solo lectura adicionales como directivas de símbolos de solo lectura. La restricción de "solo lectura" significa que, al agregar un recurso nuevo en el archivo .RC, puede usar un símbolo definido en el archivo de encabezado de solo lectura. Pero si elimina el recurso, el símbolo sigue definido en el archivo de encabezado de solo lectura. No se puede cambiar el valor numérico asignado a un símbolo de solo lectura.

Directivas de tiempo de compilación

Visual C++ también admite el anidamiento de archivos de recursos, donde un archivo .RC se incluye en otro mediante una directiva #include. Al editar un archivo .RC determinado mediante Visual C++, los recursos de los archivos incluidos no son visibles. Pero, cuando se compila el archivo .RC, también se compilan los archivos incluidos. La sección Directivas de tiempo de compilación del cuadro de diálogo Archivos de inclusión de recursos permite especificar cualquier número de archivos .RC para incluirlos como directivas de tiempo de compilación.

Observe qué ocurre si se lee en Visual C++ un archivo .RC que incluye otro archivo .RC que no* se especifica como directiva de tiempo de compilación. Esta situación podría surgir al llevar a Visual C++ un archivo .RC previamente mantenido de manera manual con un editor de texto. Cuando Visual C++ lee el archivo .RC incluido, combina los recursos incluidos en el archivo .RC principal. Al guardar el archivo .RC principal, la instrucción #include se reemplazará por los recursos incluidos. Si no quiere que se produzca esta combinación, debe quitar la instrucción #include del archivo .RC principal antes de leerlo en Visual C++ y, después, con Visual C++, volver a agregar la misma instrucción #include como una directiva de tiempo de compilación.

Visual C++ guarda en un archivo .RC los tres tipos anteriores de información establecida de inclusión (Archivo de encabezado de símbolos, Directivas de símbolos de solo lectura y Directivas en tiempo de compilación) en directivas #include y en recursos TEXTINCLUDE. Los recursos TEXTINCLUDE, un detalle de implementación del que normalmente no hay que preocuparse, se explican en Cómo administra Visual C++ la información de inclusión establecida.

Análisis de los archivos .RC y .H creados por AppWizard

El examen del código de aplicación generado por AppWizard proporciona una idea clara de cómo Visual C++ administra varios archivos de recursos y archivos de encabezado. Los fragmentos de código que se examinan a continuación proceden de una aplicación MYAPP generada mediante AppWizard con las opciones predeterminadas.

Una aplicación creada mediante AppWizard utiliza varios archivos de recursos y varios archivos de encabezado, como se resume en el diagrama siguiente:

   RESOURCE.H     AFXRES.H
          \       /
           \     /
          MYAPP.RC
              |
              |
        RES\MYAPP.RC2
        AFXRES.RC
        AFXPRINT.RC

Puede ver estas relaciones de varios archivos mediante el comando de inclusión de archivos de Visual C++.

MYAPP.RC
El archivo de recursos de la aplicación que edita con Visual C++.

RESOURCE.H es el archivo de encabezado específico de la aplicación. AppWizard siempre le asigna el nombre RESOURCE.H, de manera coherente con la denominación predeterminada de Visual C++ para el archivo de encabezado. Para este archivo de encabezado, #include es la primera instrucción del archivo de recursos (MYAPP.RC):

//Microsoft Visual C++ generated resource script
//
#include "resource.h"

RES\MYAPP.RC2
Contiene recursos que no se editarán en Visual C++, pero que se incluirán en el archivo .EXE compilado final. AppWizard no crea tales recursos de forma predeterminada, ya que Visual C++ puede editar todos los recursos estándar, incluido el recurso de versión (una nueva característica de esta versión). AppWizard genera un archivo vacío en caso de que desee agregar sus propios recursos con formato personalizado a este archivo.

Si usa recursos con formato personalizado, puede agregarlos a RES\MYAPP.RC2 y modificarlos con el editor de texto de Visual C++.

AFXRES.RC y AFXPRINT.RC contienen recursos estándar necesarios para ciertas características del marco. Como sucede con RES\MYAPP.RC2, estos dos archivos de recursos proporcionados por el marco se incluyen al final de MYAPP.RC y se especifican en las directivas de tiempo de compilación del cuadro de diálogo Archivos de inclusión establecidos. Por tanto, no verá ni editará directamente estos recursos del marco mientras cambia MYAPP.RC en Visual C++, pero se compilarán en el archivo .RES binario de la aplicación y en el archivo .EXE final. Para más información sobre los recursos estándar de .NET framework, incluidos los procedimientos para modificarlos, consulte la Nota técnica 23.

AFXRES.H define símbolos estándar, como ID_FILE_NEW, usados por el marco y, específicamente, en AFXRES.RC. AFXRES.H también usa #include para incluir WINRES.H, que contiene un subconjunto de elementos WINDOWS.H que son necesarios para los archivos .RC generados de Visual C++ y AFXRES.RC. Los símbolos definidos en AFXRES.H están disponibles cuando se edita el archivo de recursos de la aplicación (MYAPP.RC). Por ejemplo, ID_FILE_NEW se utiliza para el elemento de menú FileNew del recurso de menú del archivo MYAPP.RC. No puede cambiar ni eliminar estos símbolos definidos por el marco.

Inclusión de archivos de encabezado adicionales

La aplicación creada mediante AppWizard solo incluye dos archivos de encabezado: RESOURCE.H y AFXRES.H. Solo RESOURCE.H es específico de la aplicación. Puede ser necesario incluir archivos de encabezado de solo lectura adicionales en los casos siguientes:

El archivo de encabezado lo proporciona un origen externo o desea compartir el archivo de encabezado entre varios proyectos o partes diferentes del mismo proyecto.

El archivo de encabezado tiene formato y comentarios que no quiere que Visual C++ cambie ni filtre cuando guarde el archivo. Por ejemplo, quizá desee conservar las instrucciones #define que utilicen aritmética simbólica, tales como:

#define RED 0
#define BLUE 1
#define GREEN 2
#define ID_COLOR_BUTTON 1001
#define ID_RED_BUTTON (ID_COLOR_BUTTON + RED)
#define ID_BLUE_BUTTON (ID_COLOR_BUTTON + BLUE)
#define ID_GREEN_BUTTON (ID_COLOR_BUTTON + GREEN)

Puede incluir archivos de encabezado de solo lectura adicionales mediante el comando Archivos de inclusión de recursos para especificar la instrucción #include como segunda directiva de símbolos de solo lectura, como en:

#include "afxres.h"
#include "second.h"

El nuevo diagrama de relación entre archivos tiene ahora el siguiente aspecto:

                   AFXRES.H
    RESOURCE.H     SECOND.H
          \       /
           \     /
          MYAPP.RC
              |
              |
        RES\MYAPP.RC2  
        AFXRES.RC
        AFXPRINT.RC

Uso compartido de un archivo de encabezado entre dos archivos .RC

Es posible que quiera compartir un archivo de encabezado entre dos archivos .RC que estén en proyectos diferentes o, posiblemente, en el mismo proyecto. Para ello, aplique la técnica de directivas de solo lectura descrita anteriormente a los dos archivos .RC. Si los dos archivos .RC son para aplicaciones diferentes (proyectos distintos), el resultado se muestra en el diagrama siguiente:

     RESOURCE.H   AFXRES.H   RESOURCE.H  
    (for MYAPP1)  SECOND.H   (for MYAPP2)
          \       /     \       /
           \     /       \     /
          MYAPP1.RC      MYAPP2.RC
           /    \        /     \
          /      \      /       \
RES\MYAPP1.RC2  AFXRES.RC     RES\MYAPP2.RC2
                AFXPRINT.RC

A continuación se describe el caso en el que el segundo archivo de encabezado lo comparten dos archivos .RC en la misma aplicación (proyecto).

Uso de varios archivos de recursos en el mismo proyecto

Visual C++ y el compilador de recursos admiten varios archivos .RC en el mismo proyecto mediante directivas #include que incluyen un archivo .RC dentro de otro. Se permite el anidamiento de varios niveles. Hay varias razones para dividir los recursos del proyecto en varios archivos .RC:

  • Es más fácil administrar un gran número de recursos entre varios miembros del equipo del proyecto si se dividen en varios archivos .RC. Si usa un paquete de administración de control de código fuente para extraer los archivos del repositorio e insertar los cambios, la división de los recursos en varios archivos .RC le proporcionará un control más preciso sobre la administración de cambios en los recursos.

  • Si quiere usar directivas de preprocesador, como #ifdef, #endif y #define, para partes de los recursos, tendrá que aislarlas en recursos de solo lectura que se compilarán mediante el compilador de recursos.

  • Los archivos .RC de componente se cargarán y guardarán más rápidamente en Visual C++ que un archivo .RC compuesto.

  • Si quiere mantener un recurso con un editor de texto en un formato legible, debe hacerlo en un archivo .RC independiente del que edita Visual C++.

  • Si tiene que conservar un recurso definido por el usuario en un archivo de formato binario o de texto que sea interpretable por otro editor de datos especializado, debe mantenerlo en un archivo .RC independiente para que Visual C++ no cambie el formato a datos hexadecimales. Los recursos de archivo .WAV (de sonido) del ejemplo de conceptos avanzados SPEAKN de MFC son un buen ejemplo.

Puede incluir SECOND.RC en las directivas de tiempo de compilación en el cuadro de diálogo Archivos de inclusión establecidos:

#include "res\myapp.rc2"  // non-Visual C++ edited resources
#include "second.rc"  // THE SECOND .RC FILE

#include "afxres.rc"  // Standard components
#include "afxprint.rc"  // printing/print preview resources

El resultado se describe en el diagrama siguiente:

   RESOURCE.H     AFXRES.H
          \       /
           \     /
          MYAPP.RC
              |
              |
        RES\MYAPP.RC2
        SECOND.RC  
        AFXRES.RC
        AFXPRINT.RC

Si usa directivas de tiempo de compilación, puede organizar los recursos editables y no editables de Visual C++ en varios archivos .RC, donde el archivo MYAPP.RC principal solo aplica #include a los otros archivos .RC. Si usa un archivo .MAK de proyecto de Visual Studio C++, debe incluir el archivo .RC principal en el proyecto para que todos los recursos incluidos se compilen con la aplicación.

Cumplimiento de archivos no editables de Visual C++

El archivo RES\MYAPP.RC2 creado mediante AppWizard es un ejemplo de archivo que contiene recursos que no quiere que se lean accidentalmente en Visual C++ y, después, volverlos a escribir con pérdida de información de formato. Para protegerse de este problema, coloque las siguientes líneas al principio del archivo RES\MYAPP.RC2:

#ifdef APSTUDIO_INVOKED
    #error this file is not editable by Visual C++
#endif //APSTUDIO_INVOKED

Cuando Visual C++ compila el archivo .RC, define APSTUDIO_INVOKED y RC_INVOKED. Si se daña la estructura de archivos creada mediante AppWizard y Visual C++ lee la línea #error anterior, notifica un error irrecuperable y anula la lectura del archivo .RC.

Administración de símbolos compartidos por varios archivos .RC editados por Visual C++

Cuando se dividen los recursos en varios archivos .RC que se quieren editar por separado en Visual C++ surgen dos problemas:

  • Es posible que quiera compartir los mismos símbolos entre varios archivos .RC.

  • Debe ayudar a Visual C++ a evitar que asigne los mismos valores numéricos de id. a distintos recursos (símbolos).

En el diagrama siguiente se muestra una organización de archivos .RC y .H que se ocupa del primer problema:

              MYAPP.RC
             /         \
            /           \
MYSTRS.H   / MYSHARED.H  \  MYMENUS.H
     \    /    /      \   \    \
      \  /    /        \   \    \
      MYSTRS.RC         MYMENUS.RC

En este ejemplo, los recursos de cadena se mantienen en un archivo de recursos(MYSTRS.RC) y los menús en otro (MYMENUS.RC). Es posible que algunos símbolos, por ejemplo para comandos, deban compartirse entre los dos archivos. Por ejemplo, ID_TOOLS_SPELL puede ser el identificador de comando de menú para el elemento Ortografía de un menú Herramientas; y también puede ser el identificador de cadena del símbolo del sistema que muestra el marco en la barra de estado de la ventana principal de la aplicación.

El símbolo ID_TOOLS_SPELL se mantiene en el archivo de encabezado compartido (MYSHARED.H). Este archivo de encabezado compartido se mantiene manualmente con un editor de texto; Visual C++ no lo edita de forma directa. En los dos archivos de recursos MYSTRS.RC y MYMENUS.RC, especifique #include "MYSHARED.H" en las directivas de solo lectura para MYAPP.RC, mediante el comando Archivos de inclusión de recursos, como se ha descrito antes.

Es más conveniente prever el símbolo que se compartirá antes de intentar usarlo para identificar cualquier recurso. Agregue el símbolo al archivo de encabezado compartido y, si todavía no ha incluido el archivo de encabezado compartido en las directivas de solo lectura para el archivo .RC, hágalo antes de usar el símbolo. Si no ha previsto compartir el símbolo de esta manera, tendrá que mover manualmente (mediante un editor de texto) la instrucción #define para el símbolo desde, por ejemplo, MYMENUS.H hasta MYSHARED.H antes de utilizarla en MYSTRS.RC.

Cuando administre símbolos en varios archivos .RC, también debe ayudar a Visual C++ a evitar asignar los mismos valores numéricos de id. a recursos (símbolos) distintos. Para cualquier archivo .RC determinado, Visual C++ asigna id. de manera incremental en cada uno de estos cuatro dominios de id. Entre las sesiones de edición, Visual C++ realiza el seguimiento del último id. que ha asignado en cada uno de los dominios del archivo de encabezado de símbolos para el archivo .RC. Estos son los valores de APS_NEXT para un archivo .RC vacío (nuevo):

#define _APS_NEXT_RESOURCE_VALUE  101
#define _APS_NEXT_COMMAND_VALUE   40001
#define _APS_NEXT_CONTROL_VALUE   1000
#define _APS_NEXT_SYMED_VALUE     101

_APS_NEXT_RESOURCE_VALUE es el siguiente valor de símbolo que se utilizará para un recurso de cuadro de diálogo, un recurso de menú y así sucesivamente. El intervalo válido para los valores de símbolos de recursos es de 1 a 0x6FFF.

_APS_NEXT_COMMAND_VALUE es el siguiente valor de símbolo que se utilizará para una identificación de comando. El intervalo válido para los valores de símbolos de comando es 0x8000 a 0xDFFF.

_APS_NEXT_CONTROL_VALUE es el siguiente valor de símbolo que se utilizará para un control de cuadro de diálogo. El intervalo válido para los valores de símbolo de control del diálogo es de 8 a 0xDFFF.

_APS_NEXT_SYMED_VALUE es el siguiente valor de símbolo que se emitirá al asignar manualmente un valor de símbolo mediante el comando Nuevo del explorador de símbolos.

Visual C++ comienza con valores ligeramente superiores al valor permitido más bajo al crear un archivo .RC. AppWizard también inicializará estos valores a algo más adecuado para aplicaciones MFC. Para obtener más información acerca de los intervalos de valores del identificador, consulte la Nota técnica 20.

Ahora, cada vez que se crea un nuevo archivo de recursos, incluso en el mismo proyecto, Visual C++ define los mismos valores de _APS_NEXT_. Esto significa que si agrega, por ejemplo, varios cuadros de diálogo en dos archivos .RC diferentes, es muy probable que se asigne el mismo valor #define a los distintos cuadros de diálogo. Por ejemplo, IDD_MY_DLG1 en el primer archivo .RC podría estar asignado al mismo número (101) que IDD_MY_DLG2 en un segundo archivo .RC.

Para evitar este problema, debe reservar un intervalo numérico independiente para cada uno de los cuatro dominios de id. en los respectivos archivos .RC. Para establecer los intervalos, actualice manualmente los valores de _APS_NEXT en cada uno de los archivos .RC antes de empezar a agregar recursos. Por ejemplo, si el primer archivo .RC usa los valores _APS_NEXT predeterminados, es posible que quiera asignar los siguientes valores _APS_NEXT al segundo archivo .RC:

#define _APS_NEXT_RESOURCE_VALUE  2000
#define _APS_NEXT_COMMAND_VALUE   42000
#define _APS_NEXT_CONTROL_VALUE   2000
#define _APS_NEXT_SYMED_VALUE     2000

Por supuesto, todavía es posible que Visual C++ asigne tantos id. en el primer archivo .RC que los valores numéricos empiecen a superponerse a los reservados para el segundo archivo .RC. Debe reservar intervalos suficientemente grandes para que no se produzca esta colisión.

Administración de dependencias entre los archivos .RC, .CPP y .H

Cuando Visual C++ guarda un archivo .RC, también guarda los cambios de símbolos en archivo RESOURCE.H correspondiente. Cualquiera de los archivos .CPP que hacen referencia a recursos del archivo .RC deben usar #include para incluir el archivo RESOURCE.H, normalmente desde el archivo de encabezado principal del proyecto. Esta inclusión provoca un efecto secundario no deseado debido a la administración de proyectos interna del entorno de desarrollo, que examina los archivos de código fuente para detectar dependencias de encabezado. Cada vez que se agrega un nuevo símbolo en Visual C++, todos los archivos .CPP que tengan directivas #include "RESOURCE.H"se deben volver a compilar.

Visual C++ evita la dependencia de RESOURCE.H mediante la inclusión del siguiente comentario como primera línea del archivo RESOURCE.H:

//{{NO_DEPENDENCIES}}

El entorno de desarrollo interpreta este comentario omitiendo los cambios en RESOURCE.H para que no sea necesario recompilar los archivos .CPP dependientes.

Visual C++ agrega siempre la línea de comentario //{{NO_DEPENDENCIES}} a un archivo .RC cuando guarda el archivo. En algunos casos, evitar la dependencia de compilación de RESOURCE.H puede provocar errores en tiempo de ejecución que no se detectan en tiempo de vinculación. Por ejemplo, si usa el Explorador de símbolos para cambiar el valor numérico asignado a un símbolo para un recurso, el recurso no se encontrará correctamente y no se cargará en tiempo de ejecución de la aplicación si no se vuelve a compilar el archivo .CPP que hace referencia al recurso. En estos casos, debe volver a compilar explícitamente los archivos .CPP que se sepan afectados por los cambios de símbolos en RESOURCE.H, o bien seleccionar Recompilar todo. Si necesita cambiar con frecuencia valores de símbolos para un determinado grupo de recursos, es probable que le resulte más cómodo y seguro dividir estos símbolos en un archivo de encabezado de solo lectura independiente, como se describe en la sección anterior Inclusión de archivos de encabezado adicionales.

Cómo administra Visual C++ la información de inclusión establecida

Tal y como se describió anteriormente, el comando de inclusión del menú Archivo permite especificar tres tipos de información:

  • Archivo de encabezado de símbolos

  • Directivas de símbolos de solo lectura

  • Directivas de tiempo de compilación

En la tabla siguiente se describe cómo mantiene Visual C++ esta información en un archivo .RC. No necesita esta información para usar Visual C++, pero puede mejorar su comprensión para que pueda usar la característica de inclusión con más confianza.

Cada uno de los tres tipos anteriores de información de inclusión se almacena en el archivo .RC de dos formas: (1) como #include u otras directivas interpretables mediante el compilador de recursos y (2), como recursos TEXTINCLUDE especiales interpretables solo por Visual C++.

El propósito del recurso TEXTINCLUDE es almacenar con seguridad información de inclusión en un formato que se pueda presentar fácilmente en el cuadro de diálogo Establecer archivos de inclusión de Visual C++. TEXTINCLUDE es un tipo de recurso definido por Visual C++. Visual C++ reconoce tres recursos TEXTINCLUDE específicos que tienen los números de identificación de recurso 1, 2 y 3:

Id. de recurso TEXTINCLUDE Tipo de información de inclusión
1 Archivo de encabezado de símbolos
2 Directivas de símbolos de solo lectura
3 Directivas de tiempo de compilación

Los archivos MYAPP.RC y RESOURCE.H predeterminados creados por AppWizard ilustran los tres tipos de información de inclusión, como se describe a continuación. La sintaxis de RC necesita los tokens adicionales \0 y "" entre los bloques BEGIN y END para especificar cadenas terminadas en cero y el carácter de comilla doble, respectivamente.

Archivo de encabezado de símbolos

El formato de la información de archivo de encabezado de símbolos interpretada mediante el compilador de recursos es simplemente una instrucción #include:

#include "resource.h"

El recurso TEXTINCLUDE correspondiente es:

1 TEXTINCLUDE DISCARDABLE
BEGIN
    "resource.h\0"
END

Directivas de símbolos de solo lectura

Las directivas de símbolos de solo lectura se incluyen al principio de MYAPP.RC con el siguiente formato interpretable por el compilador de recursos:

#include "afxres.h"

El recurso TEXTINCLUDE correspondiente es:

2 TEXTINCLUDE DISCARDABLE
BEGIN
   "#include ""afxres.h""\r\n"
   "\0"
END

Directivas de tiempo de compilación

Las directivas de tiempo de compilación se incluyen al final de MYAPP.RC con el siguiente formato interpretable por el compilador de recursos:

#ifndef APSTUDIO_INVOKED
///////////////////////
//
// From TEXTINCLUDE 3
//
#include "res\myapp.rc2"  // non-Visual C++ edited resources

#include "afxres.rc"  // Standard components
#include "afxprint.rc"  // printing/print preview resources
#endif  // not APSTUDIO_INVOKED

La directiva #ifndef APSTUDIO_INVOKED indica a Visual C++ que omita las directivas de tiempo de compilación.

El recurso TEXTINCLUDE correspondiente es:

3 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""res\myapp.rc2""  // non-Visual C++ edited resources\r\n"
"\r\n"
"#include ""afxres.rc""  // Standard components\r\n"
"#include ""afxprint.rc""  // printing/print preview resources\r\n"
"\0"
END

Consulte también

Notas técnicas por número
Notas técnicas por categoría