Condividi tramite


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 da spazi vuoti (incluse le interruzioni di riga) dalla coppia parola chiave/valore successiva. La distinzione tra maiuscole e minuscole viene ignorata durante il confronto con i nomi delle parole chiave. Il valore parte può essere una costante numerica integer usando la sintassi C/C++, un nome di simbolo che segue le regole per gli identificatori C/C++ o un nome di file con 8 caratteri o meno, senza punti.

Per un file di messaggio di esempio, vedere file di testo del 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 del blocco 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 Header

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

Sintassi dell'istruzione Descrizione
MessageIdTypedef=tipo Digitare da usare nella definizione del messaggio nel modo seguente: #define nome ((tipo)0xnnnnnnnn)
Il tipo deve essere sufficientemente grande per contenere 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 tipo è vuoto, quindi non viene usato alcun cast di tipo.
Questa istruzione può essere specificata nell'intestazione e, se necessario, nella sezione di definizione del messaggio.
SeverityNames=( nome=numero[: nome]) 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 di 30 bit, assegna il modello di bit a OR logico con i valori di struttura e ID messaggio per formare il codice del messaggio. Qualsiasi valore di gravità che non rientra in 2 bit è un errore. I codici di gravità possono anche essere assegnati nomi simbolici. Il valore predefinito è definito come segue: SeverityNames=( Success=0x0 Informational=0x1 Warning=0x2 Error=0x3)
FacilityNames=( nome=numero[: nome]) 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 di 16 bit, assegna il modello di bit a or logico con i valori di gravità e ID messaggio per formare il codice del messaggio. Qualsiasi valore della struttura che non rientra in 12 bit è un errore. Ciò consente codici di struttura 4096; i primi 256 codici sono riservati per l'uso del sistema. I codici di struttura possono anche essere assegnati nomi simbolici. Il valore predefinito è definito come segue: FacilityNames=( System=0x0FF Application=0xFFF)
LanguageNames=(nome=numero:nome file) Set di nomi consentiti per i valori di lingua in una definizione di messaggio. Il numero viene usato come identificatore di lingua nella tabella delle risorse. Il file specificato contiene i messaggi per tale lingua. Si tratta in genere di un file .bin generato dal compilatore di messaggi.
Un valore di esempio è: LanguageNames=(English=0x409:MSG00409)
Per un elenco degli identificatori di lingua, vedere https://go.microsoft.com/fwlink/p/?linkid=190280.
OutputBase=numero Output di 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 messaggio dopo la sezione di intestazione. Nella tabella seguente vengono descritte le istruzioni message-definition. L'istruzione MessageId contrassegna l'inizio della definizione del messaggio. Le istruzioni Severity e Facility sono facoltative.

Sintassi dell'istruzione Descrizione
MessageId=[ numeronumero|+] Identificatore del messaggio. Questa istruzione è obbligatoria, anche se il valore è facoltativo. Se non viene specificato alcun valore, il valore usato è il valore precedente per la struttura, più uno. Se il valore viene specificato con un segno più, il valore usato è il valore precedente per la struttura, più il numero dopo il segno più. Qualsiasi valore specificato deve rientrare in 16 bit. Per altre informazioni sul formato del valore del messaggio in base alla gravità, alla struttura e all'ID del 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 SeverityNames nell'intestazione. Questa istruzione è facoltativa. Se non viene specificato alcun valore, il valore usato è l'ultimo valore specificato per una definizione di messaggio. Il valore predefinito per la prima definizione del messaggio è Severity=Success
Facility= nome Uno dei valori specificati da FacilityNames nell'intestazione. Questa istruzione è facoltativa. Se non viene specificato alcun valore, il valore usato è l'ultimo valore specificato per una definizione di messaggio. Il valore predefinito per la prima definizione del messaggio è Facility=Application
SymbolicName= nome Associa una costante simbolica C/C++ al codice del messaggio. Viene usato nella definizione del messaggio nel modo seguente: #define nome (( tipo)0xnnnnnnnn)
OutputBase={numero} Il messaggio di output per le costanti del messaggio scrive il compilatore di messaggi nel file di intestazione. Se presente, questo valore esegue l'override dell'opzione -d. Questo numero può essere 10 (decimale) o 16 (esadecimale).
Language= nome Uno dei valori specificati da LanguageNames nell'intestazione. Questa istruzione è facoltativa. Se non viene specificato alcun valore, il valore usato è l'ultimo valore specificato per una definizione di messaggio. Il valore predefinito per la prima definizione del messaggio è il seguente: Language=English
sms 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 testo del messaggio per più di una lingua, ogni lingua richiede un'istruzione language, un testo del messaggio e una nuova riga di terminazione con un punto. Per 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 di percentuale viene visualizzato senza il segno di percentuale.

% n[!format_specifier!]

Descrive un inserimento. Ogni inserimento è una voce nella matrice Arguments nella funzioneFormatMessage. 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. Può essere usato per compilare una lunga riga o terminare un messaggio di richiesta senza un carattere di nuova riga finale.

%.

Genera un singolo punto. Può essere utilizzato per visualizzare un punto all'inizio di una riga, che altrimenti termina il testo del messaggio.

%!

Genera un singolo punto esclamativo. Può essere utilizzato per specificare un punto esclamativo immediatamente dopo un inserimento.

%%

Genera un singolo segno di percentuale.

%n

Genera un'interruzione di riga rigida 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 opzione può essere utilizzata per garantire un numero appropriato di spazi finali su una linea.

%r

Genera un ritorno a capo fisso senza un carattere di nuova riga finale.