Compartir a través de


Archivos de texto del mensaje

Los mensajes se definen en un archivo de texto de mensaje. El compilador de mensajes asigna números a cada mensaje y genera un archivo de inclusión de C/C++ que la aplicación puede usar para acceder a un mensaje mediante una constante simbólica.

La sintaxis general de las instrucciones de un archivo de texto de mensaje es la siguiente:

palabra clave=valor

Los espacios alrededor del signo igual se omiten y el valor se delimita por espacios en blanco (incluidos los saltos de línea) del siguiente par palabra clave-valor. El caso se omite al comparar los nombres de palabra clave. El valor de parte puede ser una constante de entero numérico mediante la sintaxis de C/C++, un nombre de símbolo que sigue las reglas para los identificadores de C/C++ o un nombre de archivo con 8 caracteres o menos, sin puntos.

Para obtener un archivo de mensaje de ejemplo, vea archivo de texto de mensaje de ejemplo.

Comentarios

Las líneas de comentario se permiten en el archivo de texto del mensaje. Punto y coma (;) comienza un comentario que termina al final de la línea. Siga el punto y coma con un indicador de comentario de línea única (//) de C/C++ para que el archivo de encabezado generado por el compilador de mensajes se compile en la aplicación.

;// This is a single-line comment.

Para un comentario de bloque, comience cada línea con un punto y coma y, a continuación, coloque un indicador de comentario de bloque abierto de C/C++ (/*) después del punto y coma en la primera línea y el indicador de comentario de bloque de cierre (*/) después del punto y coma en la última línea.

;/* This is a block comment.
;   It spans multiple lines.
;*/

Sección de encabezado

El archivo de texto del mensaje contiene un encabezado que define nombres e identificadores de idioma para que los usen las definiciones de mensaje en el cuerpo del archivo. El encabezado contiene cero o más de las siguientes instrucciones.

Sintaxis de instrucción Descripción
MessageIdTypedef=tipo Tipo que se va a usar en la definición de mensaje de la siguiente manera: #define nombre ((tipo)0xnnn)
El tipo debe ser lo suficientemente grande como para acomodar todo el código de mensaje, como un DWORD. El tipo también puede ser un tipo definido en el código fuente de la aplicación. El valor predeterminado de tipo está vacío, por lo que no se usa ninguna conversión de tipos.
Esta instrucción se puede especificar en el encabezado y con la frecuencia necesaria en la sección de definición de mensaje.
SeverityNames=(nombre=número[: nombre de]) Conjunto de nombres permitidos para la gravedad en una definición de mensaje. Asociado a cada nombre de gravedad es un número que, cuando se desplaza a la izquierda por 30 bits, proporciona el patrón de bits a lógico-OR con los valores de instalación e id. de mensaje para formar el código de mensaje. Cualquier valor de gravedad que no se ajuste a 2 bits es un error. También se pueden asignar nombres simbólicos a los códigos de gravedad. El valor predeterminado se define de la siguiente manera: SeverityNames=( Success=0x0 Informational=0x1 Warning=0x2 Error=0x3)
FacilityNames=(nombre=número[: nombre de]) Conjunto de nombres permitidos para los valores de instalación en una definición de mensaje. Asociado a cada nombre de instalación es un número que, cuando se desplaza hacia la izquierda por 16 bits, proporciona el patrón de bits a lógico-OR con los valores de gravedad e identificador de mensaje para formar el código de mensaje. Cualquier valor de instalación que no se ajuste a 12 bits es un error. Esto permite 4096 códigos de instalación; los primeros 256 códigos están reservados para uso del sistema. También se pueden asignar nombres simbólicos a los códigos de instalación. El valor predeterminado se define de la siguiente manera: FacilityNames=( System=0x0FF Application=0xFFF)
LanguageNames=(nombre=número:nombre de archivo) Conjunto de nombres permitidos para los valores de idioma en una definición de mensaje. El número se usa como identificador de idioma en la tabla de recursos. El archivo especificado contiene los mensajes de ese idioma. Normalmente es un archivo .bin generado por el compilador de mensajes.
Un valor de ejemplo es: LanguageNames=(English=0x409:MSG00409)
Para obtener una lista de identificadores de idioma, consulte https://go.microsoft.com/fwlink/p/?linkid=190280.
OutputBase= número de Radix de salida para las constantes de mensaje que el compilador de mensajes escribe en el archivo de encabezado. Si está presente, este valor invalida el modificador -d. Este número puede ser 10 (decimal) o 16 (hexadecimal).

Definiciones de mensajes

Un archivo de texto de mensaje contiene cero o más definiciones de mensaje después de la sección de encabezado. En la tabla siguiente se describen las instrucciones message-definition. La instrucción MessageId marca el principio de la definición del mensaje. Las instrucciones Severity y Facility son opcionales.

Sintaxis de instrucción Descripción
MessageId=[número|+número] Identificador del mensaje. Esta instrucción es necesaria, aunque el valor es opcional. Si no se especifica ningún valor, el valor utilizado es el valor anterior de la instalación, más uno. Si el valor se especifica con un signo más, el valor utilizado es el valor anterior de la instalación, además del número después del signo más. Cualquier valor especificado debe caber en 16 bits. Para obtener más información sobre cómo se forma el valor del mensaje a partir de la gravedad, la instalación y el identificador de mensaje, consulte el diagrama en Winerror.h. Este archivo de encabezado define códigos de error para el sistema.
Gravedad=nombre de Uno de los valores especificados por SeverityNames en el encabezado. Esta instrucción es opcional. Si no se especifica ningún valor, el valor utilizado es el último especificado para una definición de mensaje. El valor predeterminado de la primera definición de mensaje es Severity=Success
Facility=nombre Uno de los valores especificados por FacilityNames en el encabezado . Esta instrucción es opcional. Si no se especifica ningún valor, el valor utilizado es el último especificado para una definición de mensaje. El valor predeterminado de la primera definición de mensaje es Facility=Application
SymbolicName=nombre Asocia una constante simbólica de C/C++ al código del mensaje. Se usa en la definición de mensaje de la siguiente manera: #define nombre ((tipo)0xnnn)
OutputBase={ número de} Radix de salida para las constantes de mensaje que el compilador de mensajes escribe en el archivo de encabezado. Si está presente, este valor invalida el modificador -d. Este número puede ser 10 (decimal) o 16 (hexadecimal).
Language=nombre Uno de los valores especificados por LanguageNames en el encabezado. Esta instrucción es opcional. Si no se especifica ningún valor, el valor utilizado es el último especificado para una definición de mensaje. El valor predeterminado para la primera definición de mensaje es el siguiente: Language=English
de texto del mensaje Texto del mensaje. Se incluye en el archivo binario del mensaje. También se incluye en el archivo de encabezado del bloque de comentarios que precede directamente a la definición del mensaje.
. El texto del mensaje finaliza mediante una nueva línea que contiene un único punto al principio de la línea.

Si la definición del mensaje incluye texto de mensaje para más de un idioma, cada idioma requiere su propia instrucción Language, texto del mensaje y finalización de una nueva línea con un punto. Por ejemplo:

MessageId=0x1
Severity=Error
Facility=Runtime
SymbolicName=MSG_BAD_COMMAND
Language=English
You have chosen an incorrect command.
.

Language=Japanese
<Japanese message string goes here>
.

Puede especificar las siguientes secuencias de escape para dar formato al texto del mensaje para que lo use el visor de eventos o la aplicación. El carácter de signo de porcentaje (%) comienza todas las secuencias de escape. Cualquier otro carácter que siga un signo de porcentaje se muestra sin el signo de porcentaje.

% n[!format_specifier!]

Describe una inserción. Cada inserción es una entrada de la matriz Arguments de la función FormatMessage. El valor de n puede ser un número comprendido entre 1 y 99. El especificador de formato es opcional. Si no se especifica ningún valor, el valor predeterminado es !s!. Para obtener información sobre el especificador de formato, vea wsprintf.

El especificador de formato puede usar * para la precisión o el ancho. Cuando se especifica, consumen inserciones numeradas n+1 y n+2.

%0

Finaliza una línea de texto de mensaje sin un carácter de nueva línea final. Esto se puede usar para crear una línea larga o finalizar un mensaje de aviso sin un carácter de nueva línea final.

%.

Genera un único período. Esto se puede usar para mostrar un punto al principio de una línea, que de lo contrario finalizaría el texto del mensaje.

%!

Genera un único signo de exclamación. Se puede usar para especificar un signo de exclamación inmediatamente después de una inserción.

%%

Genera un signo de un solo porcentaje.

%n

Genera un salto de línea dura cuando se produce al final de una línea. Esto se puede usar con FormatMessage para asegurarse de que el mensaje se ajusta a un ancho determinado.

%b

Genera un carácter de espacio. Esto se puede usar para garantizar un número adecuado de espacios finales en una línea.

%r

Genera un retorno de carro duro sin un carácter de nueva línea final.