2009-10-02 20 views

Respuesta

8

El preprocesador se ejecuta en el archivo .RC también. Defina los datos compartidos en un encabezado incluido por el .RC y su código fuente.

es decir, en foo.h:

#define MY_PRODUCT_NAME Foo 

Luego, en el foo.rc:

#include "foo.h" 

VS_VERSION_INFO VERSIONINFO 
    // Many lines omitted 
    VALUE "ProductName", MY_PRODUCT_NAME 

Luego, en foo.cpp:

#include "foo.h" 

cout << MY_PRODUCT_NAME; 
+0

Buena idea, pero en el archivo RC tiene un bloque de cadena de información que también tiene la información de la versión (en un formato ligeramente diferente). ¿Hay alguna forma de acceder simplemente a los valores del archivo RC en lugar de volver a definirlos y mantenerlos en un lugar común? – known

+0

Ninguno que yo sepa - rc.exe es independiente de cl.exe. – Michael

+0

Cuando cambia el cuadro de diálogo o lo que sea que esté trabajando, se genera un nuevo archivo .rc y se sobrescribe el anterior. Entonces este '#include" foo.h "' ya no estará allí. Esta no es una buena solución. – LihO

2

Mi solución a este problema es simple y funciona bien y no es borrado por el editor de recursos. 1. Mueva toda la sección VS_VERSION_INFO en su archivo .RC2. 2. Reemplace todos los números de versión y cadenas con los valores que #define en un nuevo archivo version.h. 3. Agregue #include "version.h" a su archivo .RC2. Ahora también puede incluir version.h en otros archivos .CPP y usar los valores #define en su código, por ejemplo, para mostrar los recursos de la versión de la aplicación en un cuadro de diálogo.

+1

Microsoft también sugiere esta solución (aunque no es muy fácil googlear): http://support.microsoft.com/kb/237870/en-us – Steed

Cuestiones relacionadas