Nachrichtentextdateien
Nachrichten werden in einer Nachrichtentextdatei definiert. Der Nachrichtencompiler weist jeder Nachricht Zahlen zu und generiert eine C/C++-Includedatei, mit der die Anwendung mithilfe einer symbolischen Konstanten auf eine Nachricht zugreifen kann.
Die allgemeine Syntax für Anweisungen in einer Nachrichtentextdatei lautet wie folgt:
= Schlüsselwort (keyword)Wert
Leerzeichen um das Gleichheitszeichen werden ignoriert, und der Wert wird durch Leerzeichen (einschließlich Zeilenumbrüchen) vom nächsten Schlüsselwort (keyword)/Wert-Paar getrennt. Die Groß-/Kleinschreibung wird beim Vergleich mit Schlüsselwort (keyword) Namen ignoriert. Der Wertteil kann eine numerische Ganzzahlkonstante mit C/C++-Syntax, ein Symbolname sein, der den Regeln für C/C++-Bezeichner folgt, oder ein Dateiname mit maximal 8 Zeichen ohne Punkte.
Eine Beispielnachrichtendatei finden Sie unter Beispielnachrichtentextdatei.
Kommentare
Kommentarzeilen sind in der Nachrichtentextdatei zulässig. Ein Semikolon (;) beginnt einen Kommentar, der am Ende der Zeile endet. Folgen Sie dem Semikolon mit einem C/C++-Zeilenkommentar-Indikator (//), damit die vom Nachrichtencompiler generierte Headerdatei in Ihrer Anwendung kompiliert wird.
;// This is a single-line comment.
Bei einem Blockkommentar beginnen Sie jede Zeile mit einem Semikolon, und platzieren Sie dann einen C/C++-Indikator für offene Blockkommentare (/*) nach dem Semikolon in der ersten Zeile und den Kommentarindikator zum Schließen des Blocks (*/) nach dem Semikolon in der letzten Zeile.
;/* This is a block comment.
; It spans multiple lines.
;*/
Headerabschnitt
Die Nachrichtentextdatei enthält einen Header, der Namen und Sprachbezeichner für die Verwendung durch die Nachrichtendefinitionen im Textkörper der Datei definiert. Der Header enthält null oder mehr der folgenden Anweisungen.
Anweisungssyntax | BESCHREIBUNG |
---|---|
MessageIdTypedef=type | Geben Sie in der Nachrichtendefinition wie folgt ein: #define Name ((type)0xnnnnnn) Der Typ muss groß genug sein, um den gesamten Nachrichtencode, z. B. ein DWORD, aufzunehmen. Der Typ kann auch ein Typ sein, der im Quellcode der Anwendung definiert ist. Der Standardwert für type ist leer, sodass keine Typumwandlung verwendet wird. Diese Anweisung kann im Header und so oft wie erforderlich im Abschnitt zur Nachrichtendefinition angegeben werden. |
SeverityNames=(name=number[:name]) | Eine Reihe von Namen, die für den Schweregrad in einer Nachrichtendefinition zulässig sind. Jedem Schweregradnamen zugeordnet ist eine Zahl, die, wenn sie um 30 Bit nach links verschoben wird, das Bitmuster an logical-OR mit den Funktions- und Nachrichten-ID-Werten zum Bilden des Nachrichtencodes angibt. Jeder Schweregrad, der nicht in 2 Bits passt, ist ein Fehler. Den Schweregradcodes können auch symbolische Namen gegeben werden. Der Standardwert ist wie folgt definiert: SeverityNames=( Success=0x0 Informational=0x1 Warning=0x2 Error=0x3) |
FacilityNames=(name=number[:name]) | Gruppe von Namen, die für die Facility-Werte in einer Nachrichtendefinition zulässig sind. Jedem Einrichtungsnamen zugeordnet ist eine Zahl, die, wenn sie um 16 Bit nach links verschoben wird, das Bitmuster logical-OR mit dem Schweregrad und den Nachrichten-ID-Werten zum Bilden des Nachrichtencodes ergibt. Jeder Facility-Wert, der nicht in 12 Bits passt, ist ein Fehler. Dies ermöglicht 4096 Einrichtungscodes; die ersten 256 Codes sind für die Systemverwendung reserviert. Die Einrichtungscodes können auch symbolische Namen erhalten. Der Standardwert ist wie folgt definiert: FacilityNames=( System=0x0FF Application=0xFFF) |
LanguageNames=(name=number:filename) | Gruppe von Namen, die für die Sprachwerte in einer Nachrichtendefinition zulässig sind. Die Zahl wird als Sprachbezeichner in der Ressourcentabelle verwendet. Die angegebene Datei enthält die Meldungen für diese Sprache. Es handelt sich in der Regel um eine BIN-Datei, die vom Nachrichtencompiler generiert wird. Ein Beispielwert ist: LanguageNames=(English=0x409:MSG00409) Eine Liste der Sprachbezeichner finden Sie unter https://go.microsoft.com/fwlink/p/?linkid=190280. |
OutputBase=Zahl | Ausgabe radix für die Nachrichtenkonstanten, die der Nachrichtencompiler in die Headerdatei schreibt. Falls vorhanden, überschreibt dieser Wert den Schalter -d. Diese Zahl kann entweder 10 (dezimal) oder 16 (hexadezimal) sein. |
Nachrichtendefinitionen
Eine Nachrichtentextdatei enthält 0 oder mehr Nachrichtendefinitionen nach dem Headerabschnitt. In der folgenden Tabelle werden die Nachrichtendefinitionsanweisungen beschrieben. Die MessageId-Anweisung markiert den Anfang der Nachrichtendefinition. Die Anweisungen "Schweregrad" und "Facility" sind optional.
Anweisungssyntax | BESCHREIBUNG |
---|---|
MessageId=[Number|+number] | Bezeichner für die Nachricht. Diese Anweisung ist erforderlich, obwohl der Wert optional ist. Wenn kein Wert angegeben wird, entspricht der verwendete Wert dem vorherigen Wert für die Einrichtung plus eins. Wenn der Wert mit einem Pluszeichen angegeben wird, ist der verwendete Wert der vorherige Wert für die Einrichtung, plus die Zahl nach dem Pluszeichen. Jeder angegebene Wert muss in 16 Bits passen. Weitere Informationen dazu, wie der Nachrichtenwert aus dem Schweregrad, der Einrichtung und der Nachrichten-ID gebildet wird, finden Sie im Diagramm in Winerror.h. Diese Headerdatei definiert Fehlercodes für das System. |
Schweregrad=Name | Einer der Werte, die von SeverityNames im Header angegeben werden. Diese Anweisung ist optional. Wenn kein Wert angegeben wird, wird der zuletzt für eine Nachrichtendefinition angegebene Wert verwendet. Die Standardeinstellung für die erste Nachrichtendefinition ist. Severity=Success |
Facility=name | Einer der Von FacilityNames im Header angegebenen Werte. Diese Anweisung ist optional. Wenn kein Wert angegeben wird, wird der zuletzt für eine Nachrichtendefinition angegebene Wert verwendet. Die Standardeinstellung für die erste Nachrichtendefinition ist. Facility=Application |
SymbolicName=name | Ordnet dem Nachrichtencode eine symbolische C/C++-Konstante zu. Sie wird in der Nachrichtendefinition wie folgt verwendet: #define name ((type)0xnnnnnnn) |
OutputBase={number} | Ausgaberadix für die Nachrichtenkonstanten, die der Nachrichtencompiler in die Headerdatei schreibt. Falls vorhanden, überschreibt dieser Wert den Schalter -d. Diese Zahl kann entweder 10 (dezimal) oder 16 (hexadezimal) sein. |
Language=name | Einer der Von LanguageNames im Header angegebenen Werte. Diese Anweisung ist optional. Wenn kein Wert angegeben wird, wird der zuletzt für eine Nachrichtendefinition angegebene Wert verwendet. Die Standardeinstellung für die erste Nachrichtendefinition lautet wie folgt: Language=English |
Nachrichtentext | Text für die Nachricht. Sie ist in der Binärdatei der Nachricht enthalten. Sie ist auch in der Headerdatei im Kommentarblock enthalten, der der Nachrichtendefinition direkt vorangestellt ist. |
. | Nachrichtentext wird durch eine neue Zeile beendet, die einen einzelnen Punkt am Anfang der Zeile enthält. |
Wenn die Nachrichtendefinition Nachrichtentext für mehrere Sprachen enthält, erfordert jede Sprache eine eigene Language-Anweisung, einen eigenen Nachrichtentext und eine neue Zeile mit einem Punkt. Beispiel:
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>
.
Sie können die folgenden Escapesequenzen zum Formatieren von Nachrichtentext zur Verwendung durch die Ereignisanzeige oder Ihre Anwendung angeben. Das Prozentzeichen (%) beginnt alle Escapesequenzen. Alle anderen Zeichen, die einem Prozentzeichen folgen, werden ohne das Prozentzeichen angezeigt.
-
% n[! format_specifier!]
-
Beschreibt eine Einfügung. Jede Einfügung ist ein Eintrag im Argumentarray in der FormatMessage-Funktion . Der Wert von n kann eine Zahl zwischen 1 und 99 sein. Der Formatbezeichner ist optional. Wenn kein Wert angegeben wird, ist der Standardwert !s!. Informationen zum Formatbezeichner finden Sie unter wsprintf.
Der Formatbezeichner kann * für die Genauigkeit oder die Breite verwenden. Wenn angegeben, verwenden sie die Nummerierungen n+1 und n+2.
-
%0
-
Beendet eine Nachrichtentextzeile ohne nachfolgendes Zeilenumbruchzeichen. Dies kann verwendet werden, um eine lange Zeile zu erstellen oder eine Eingabeaufforderung ohne nachfolgendes Zeilenumbruchzeichen zu beenden.
-
%.
-
Generiert einen einzelnen Punkt. Dies kann verwendet werden, um einen Punkt am Anfang einer Zeile anzuzeigen, die andernfalls den Nachrichtentext beenden würde.
-
%!
-
Generiert ein einzelnes Ausrufezeichen. Dies kann verwendet werden, um unmittelbar nach einer Einfügung ein Ausrufezeichen anzugeben.
-
%%
-
Generiert ein einzelnes Prozentzeichen.
-
%n
-
Generiert einen harten Zeilenumbruch, wenn er am Ende einer Zeile auftritt. Dies kann mit FormatMessage verwendet werden, um sicherzustellen, dass die Nachricht einer bestimmten Breite entspricht.
-
%b
-
Generiert ein Leerzeichen. Dies kann verwendet werden, um eine angemessene Anzahl von nachgestellten Leerzeichen in einer Zeile sicherzustellen.
-
%r
-
Generiert einen harten Wagenrücklauf ohne nachfolgendes Zeilenumbruchzeichen.