File di testo del messaggio

I messaggi vengono definiti in un file di testo del messaggio. Il compilatore di messaggi assegna numeri a ogni messaggio e genera un file di inclusione C/C++ che l'applicazione può usare per accedere a un messaggio usando una costante simbolica.

La sintassi generale per le istruzioni in un file di testo del messaggio è la seguente:

Parola chiave=Valore

Gli spazi intorno al segno di uguale vengono ignorati e il valore è delimitato dallo spazio vuoto (incluse le interruzioni di riga) dalla coppia parola chiave/valore successiva. Il caso viene ignorato quando si confronta con i nomi delle parole chiave. La parte del valore può essere una costante integer numerica usando la sintassi C/C++, un nome simbolo che segue le regole per gli identificatori C/C++ o un nome file con 8 caratteri o meno, senza periodi.

Per un file di messaggio di esempio, vedere File di testo messaggio di esempio.

Commenti

Le righe di commento sono consentite nel file di testo del messaggio. Punto e virgola (;) inizia un commento che termina alla fine della riga. Seguire il punto e virgola con un indicatore di commento a riga singola C/C++ (//) in modo che il file di intestazione generato dal compilatore di messaggi venga compilato nell'applicazione.

;// This is a single-line comment.

Per un commento a blocchi, iniziare ogni riga con un punto e virgola, quindi posizionare un indicatore di commento a blocchi aperto C/C++ (/*) dopo il punto e virgola sulla prima riga e l'indicatore di commento del blocco di chiusura (*/) dopo il punto e virgola sull'ultima riga.

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

Sezione di intestazione

Il file di testo del messaggio contiene un'intestazione che definisce nomi e identificatori di lingua da usare dalle definizioni dei messaggi nel corpo del file. L'intestazione contiene zero o più istruzioni seguenti.

Sintassi dell'istruzione Descrizione
MessageIdTypedef=type Digitare da usare nella definizione del messaggio come indicato di seguito: #define nome ((type)0xnnnnnnnnnn)
Il tipo deve essere abbastanza grande per ospitare l'intero codice del messaggio, ad esempio un DWORD. Il tipo può anche essere un tipo definito nel codice sorgente dell'applicazione. Il valore predefinito per il tipo è vuoto, quindi non viene usato alcun cast di tipi.
Questa istruzione può essere specificata nell'intestazione e, se necessario, nella sezione definizione del messaggio.
SeverityNames=(namenumber[:name=]) Set di nomi consentiti per la gravità in una definizione di messaggio. Associato a ogni nome di gravità è un numero che, quando spostato a sinistra da 30 bit, fornisce il modello bit a logic-OR con la struttura e i valori ID messaggio per formare il codice del messaggio. Qualsiasi valore di gravità che non si adatta a 2 bit è un errore. Anche i codici di gravità possono essere assegnati nomi simbolici. Il valore predefinito è definito come segue: GravitàNames=( Success=0x0 Informational=0x1 Warning=0x2 Error=0x3)
FacilityNames=(namenumber[:name=]) Set di nomi consentiti per i valori della struttura in una definizione di messaggio. Associato a ogni nome della struttura è un numero che, quando spostato a sinistra per 16 bit, fornisce il modello bit a logic-OR con i valori di gravità e ID messaggio per formare il codice del messaggio. Qualsiasi valore della struttura che non si adatta a 12 bit è un errore. Ciò consente di 4096 codici di struttura; i primi 256 codici sono riservati per l'uso del sistema. I codici della struttura possono anche essere assegnati nomi simbolici. Il valore predefinito è definito come segue: FacilityNames=( System=0x0FF Application=0xFFF)
LanguageNames=(name=number:filename) Set di nomi consentiti per i valori della lingua in una definizione di messaggio. Il numero viene usato come identificatore della lingua nella tabella delle risorse. Il file specificato contiene i messaggi per tale lingua. In genere è un file con estensione bin generato dal compilatore di messaggi.
Un valore di esempio è: LanguageNames=(English=0x409:MSG00409)
Per un elenco di identificatori di lingua, vedere https://go.microsoft.com/fwlink/p/?linkid=190280.
OutputBase=number Output radix per le costanti del messaggio che il compilatore di messaggi scrive nel file di intestazione. Se presente, questo valore esegue l'override dell'opzione -d. Questo numero può essere 10 (decimale) o 16 (esadecimale).

Definizioni dei messaggi

Un file di testo del messaggio contiene zero o più definizioni di messaggi che seguono la sezione intestazione. Nella tabella seguente vengono descritte le istruzioni di definizione dei messaggi. L'istruzione MessageId contrassegna l'inizio della definizione del messaggio. Le istruzioni Gravità e Facility sono facoltative.

Sintassi dell'istruzione Descrizione
MessageId=[number|+] Identificatore per il messaggio. Questa istruzione è obbligatoria, anche se il valore è facoltativo. Se non viene specificato alcun valore, il valore utilizzato è il valore precedente per la struttura, più uno. Se il valore viene specificato con un segno più, il valore utilizzato è il valore precedente per la struttura, più il numero dopo il segno più. Qualsiasi valore specificato deve corrispondere a 16 bit. Per altre informazioni su come viene formato il valore del messaggio dalla gravità, dalla struttura e dall'ID messaggio, vedere il diagramma in Winerror.h. Questo file di intestazione definisce i codici di errore per il sistema.
Gravità=nome Uno dei valori specificati da GravitàNames nell'intestazione. Questa istruzione è facoltativa. Se non viene specificato alcun valore, il valore utilizzato è l'ultimo specificato per una definizione del messaggio. Il valore predefinito per la prima definizione del messaggio è Severity=Success
Facility=name Uno dei valori specificati da FacilityNames nell'intestazione. Questa istruzione è facoltativa. Se non viene specificato alcun valore, il valore utilizzato è l'ultimo specificato per una definizione del messaggio. Il valore predefinito per la prima definizione del messaggio è Facility=Application
SymbolicName=name Associa una costante simbolica C/C++ al codice del messaggio. Viene usato nella definizione del messaggio come indicato di seguito: #define nome ((type)0xnnnnnnnnnn)
OutputBase={number} L'output di radix per le costanti del messaggio scrive nel file di intestazione. Se presente, questo valore esegue l'override dell'opzione -d. Questo numero può essere 10 (decimale) o 16 (esadecimale).
Language=name Uno dei valori specificati da LanguageNames nell'intestazione. Questa istruzione è facoltativa. Se non viene specificato alcun valore, il valore utilizzato è l'ultimo specificato per una definizione del messaggio. Il valore predefinito per la prima definizione del messaggio è il seguente: Language=English
testo del messaggio Testo per il messaggio. È incluso nel file binario del messaggio. È incluso anche nel file di intestazione nel blocco di commento che precede direttamente la definizione del messaggio.
. Il testo del messaggio viene terminato da una nuova riga contenente un singolo punto all'inizio della riga.

Se la definizione del messaggio include il testo del messaggio per più lingue, ogni lingua richiede una propria istruzione Language, testo del messaggio e terminazione di una nuova riga con un punto. Ad esempio:

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>
.

È possibile specificare le sequenze di escape seguenti per la formattazione del testo del messaggio da usare dal visualizzatore eventi o dall'applicazione. Il carattere di segno percentuale (%) inizia tutte le sequenze di escape. Qualsiasi altro carattere che segue un segno percentuale viene visualizzato senza il segno percentuale.

%n[! format_specifier!]

Descrive un inserimento. Ogni inserimento è una voce nella matrice Argomenti nella funzione FormatMessage . Il valore di n può essere un numero compreso tra 1 e 99. L'identificatore di formato è facoltativo. Se non viene specificato alcun valore, il valore predefinito è !s!. Per informazioni sull'identificatore di formato, vedere wsprintf.

L'identificatore di formato può usare * per la precisione o la larghezza. Se specificato, utilizzano inserimenti numerati n+1 e n+2.

%0

Termina una riga di testo del messaggio senza un carattere di nuova riga finale. Questa operazione può essere usata per compilare una riga lunga o terminare un messaggio di richiesta senza un carattere di nuova riga finale.

%.

Genera un singolo periodo. Questa operazione può essere usata per visualizzare un periodo all'inizio di una riga, che altrimenti termina il testo del messaggio.

%!

Genera un singolo punto esclamativo. Questa operazione può essere usata per specificare un punto esclamativo immediatamente dopo un inserimento.

%%

Genera un singolo segno percentuale.

%n

Genera un'interruzione di linea dura quando si verifica alla fine di una riga. Questa operazione può essere usata con FormatMessage per assicurarsi che il messaggio corrisponda a una determinata larghezza.

%b

Genera un carattere di spazio. Questa operazione può essere usata per garantire un numero appropriato di spazi finali su una linea.

%r

Genera un ritorno a capo duro senza un carattere nuova riga finale.