Tekstbestanden voor berichten
Berichten worden gedefinieerd in een berichttekstbestand. De berichtcompilator wijst getallen toe aan elk bericht en genereert een C/C++-bestand dat de toepassing kan gebruiken om toegang te krijgen tot een bericht met behulp van een symbolische constante.
De algemene syntaxis voor instructies in een berichttekstbestand is als volgt:
trefwoord=waarde
Spaties rond het gelijkteken worden genegeerd en de waarde wordt gescheiden door witruimte (inclusief regeleinden) uit het volgende trefwoord/waardepaar. Hoofdlettergebruik wordt genegeerd bij het vergelijken met trefwoordnamen. De waarde gedeelte kan een numerieke geheel getalconstante zijn met behulp van de syntaxis C/C++, een symboolnaam die de regels voor C/C++-id's volgt, of een bestandsnaam met 8 tekens of minder, zonder punten.
Zie voorbeeldtekstbestand voor berichtenvoor een voorbeeld van een berichtbestand.
Opmerkingen
Opmerkingenregels zijn toegestaan in het tekstbestand van het bericht. Een puntkomma (;) begint een opmerking die eindigt aan het einde van de regel. Volg de puntkomma met een C/C++ opmerkingsindicator met één regel (//), zodat het headerbestand dat door de berichtcompilator wordt gegenereerd, wordt gecompileerd in uw toepassing.
;// This is a single-line comment.
Voor een blokcommentaar begint u elke regel met een puntkomma en plaatst u vervolgens een C/C++-indicator voor blokcommentaar (/*) na de puntkomma op de eerste regel en de indicator voor blokcommentaar (*/) na de puntkomma op de laatste regel.
;/* This is a block comment.
; It spans multiple lines.
;*/
Koptekstsectie
Het tekstbestand van het bericht bevat een koptekst die namen en taal-id's definieert voor gebruik door de berichtdefinities in de hoofdtekst van het bestand. De header bevat nul of meer van de volgende instructies.
Syntaxis van instructie | Beschrijving |
---|---|
MessageIdTypedef=type | Typ als volgt in de berichtdefinitie: #define naam ((type)0xnnnnnnn) Het type moet groot genoeg zijn voor de volledige berichtcode, zoals een DWORD-. Het type kan ook een type zijn dat is gedefinieerd in de broncode van de toepassing. De standaardwaarde voor type is leeg, dus er wordt geen type cast gebruikt. Deze instructie kan worden opgegeven in de koptekst en zo vaak als nodig is in de sectie berichtdefinitie. |
SeverityNames=(naam=getal[:naam]) | Set namen die zijn toegestaan voor de ernst in een berichtdefinitie. Gekoppeld aan elke ernstnaam is een getal dat, wanneer deze wordt verschoven met 30 bits, het bitpatroon aan logische OF met de faciliteit- en bericht-id-waarden geeft om de berichtcode te vormen. Elke ernstwaarde die niet in 2 bits past, is een fout. De ernstcodes kunnen ook symbolische namen krijgen. De standaardwaarde wordt als volgt gedefinieerd: SeverityNames=( Success=0x0 Informational=0x1 Warning=0x2 Error=0x3) |
FacilityNames=(naam=nummer[:naam]) | Set namen die zijn toegestaan voor de faciliteitwaarden in een berichtdefinitie. Gekoppeld aan elke naam van de faciliteit is een getal dat, wanneer deze wordt verschoven met 16 bits, het bitpatroon aan logische of met de ernst- en bericht-id-waarden geeft om de berichtcode te vormen. Een faciliteitwaarde die niet in 12 bits past, is een fout. Dit maakt 4096 faciliteitcodes mogelijk; de eerste 256 codes zijn gereserveerd voor systeemgebruik. De faciliteitcodes kunnen ook symbolische namen krijgen. De standaardwaarde wordt als volgt gedefinieerd: FacilityNames=( System=0x0FF Application=0xFFF) |
LanguageNames=(naam=nummer:bestandsnaam) | Set namen die zijn toegestaan voor de taalwaarden in een berichtdefinitie. Het getal wordt gebruikt als de taal-id in de resourcetabel. Het opgegeven bestand bevat de berichten voor die taal. Dit is meestal een .bin bestand dat wordt gegenereerd door de berichtcompilator. Een voorbeeldwaarde is: LanguageNames=(Engels=0x409:MSG00409) Zie https://go.microsoft.com/fwlink/p/?linkid=190280voor een lijst met taal-id's. |
OutputBase=getal | Uitvoer radix voor de berichtconstanten die de berichtcompilator naar het headerbestand schrijft. Indien aanwezig, overschrijft deze waarde de schakeloptie -d. Dit getal kan 10 (decimaal) of 16 (hexadecimaal) zijn. |
Berichtdefinities
Een berichttekstbestand bevat nul of meer berichtdefinities na de koptekstsectie. In de volgende tabel worden de berichtdefinitieinstructies beschreven. De MessageId-instructie markeert het begin van de berichtdefinitie. De ernst- en faciliteitsinstructies zijn optioneel.
Syntaxis van instructie | Beschrijving |
---|---|
MessageId=[getal|+getal] | Id voor het bericht. Deze instructie is vereist, hoewel de waarde optioneel is. Als er geen waarde is opgegeven, is de gebruikte waarde de vorige waarde voor de faciliteit, plus één. Als de waarde is opgegeven met een plusteken, is de gebruikte waarde de vorige waarde voor de faciliteit, plus het getal na het plusteken. Elke opgegeven waarde moet in 16 bits passen. Zie het diagram in Winerror.h voor meer informatie over hoe de berichtwaarde wordt gevormd op basis van de ernst, faciliteit en bericht-id. Dit headerbestand definieert foutcodes voor het systeem. |
Ernst =naam | Een van de waarden die zijn opgegeven door SeverityNames in de header. Deze instructie is optioneel. Als er geen waarde is opgegeven, is de gebruikte waarde de waarde die het laatst is opgegeven voor een berichtdefinitie. De standaardinstelling voor de eerste berichtdefinitie is Severity=Success |
Facility=naam | Een van de waarden die zijn opgegeven door FacilityNames in de header. Deze instructie is optioneel. Als er geen waarde is opgegeven, is de gebruikte waarde de waarde die het laatst is opgegeven voor een berichtdefinitie. De standaardinstelling voor de eerste berichtdefinitie is Facility=Application |
Symbolname=naam | Koppelt een symbolische constante van C/C++ aan de berichtcode. Deze wordt als volgt gebruikt in de berichtdefinitie: #define naam ((type)0xnnnnn) |
OutputBase={getal} | Uitvoer radix voor de berichtconstanten schrijft de berichtcompilator naar het headerbestand. Indien aanwezig, overschrijft deze waarde de schakeloptie -d. Dit getal kan 10 (decimaal) of 16 (hexadecimaal) zijn. |
Language=name | Een van de waarden die zijn opgegeven door LanguageNames in de header. Deze instructie is optioneel. Als er geen waarde is opgegeven, is de gebruikte waarde de waarde die het laatst is opgegeven voor een berichtdefinitie. De standaardinstelling voor de eerste berichtdefinitie is als volgt: Language=English |
berichttekst | Tekst voor het bericht. Het is opgenomen in het binaire berichtbestand. Het is ook opgenomen in het koptekstbestand in het opmerkingenblok dat direct voorafgaat aan de berichtdefinitie. |
. | Berichttekst wordt beëindigd door een nieuwe regel met één punt aan het begin van de regel. |
Als de berichtdefinitie berichttekst voor meer dan één taal bevat, vereist elke taal een eigen taalinstructie, berichttekst en het beëindigen van een nieuwe regel met een punt. Bijvoorbeeld:
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>
.
U kunt de volgende escapereeksen opgeven voor het opmaken van berichttekst voor gebruik door de logboeken of uw toepassing. Het procentteken (%) begint met alle escapereeksen. Elk ander teken na een procentteken wordt weergegeven zonder het procentteken.
-
% n[!format_specifier!]
-
Beschrijft een invoeging. Elke invoegpositie is een vermelding in de matrix Argumenten in de functie FormatMessage. De waarde van n kan een getal tussen 1 en 99 zijn. De notatieaanduiding is optioneel. Als er geen waarde is opgegeven, is de standaardwaarde !s!. Zie wsprintfvoor meer informatie over de indelingsaanduiding.
De notatieaanduiding kan * gebruiken voor de precisie of de breedte. Wanneer dit is opgegeven, verbruiken ze ingevoegde n+1 en n+2.
-
%0
-
Hiermee wordt een tekstregel voor een bericht beëindigd zonder een volgteken voor een nieuwe regel. Dit kan worden gebruikt om een lange regel te maken of een promptbericht te beëindigen zonder een volgteken voor een nieuwe regel.
-
%.
-
Hiermee wordt één punt gegenereerd. Dit kan worden gebruikt om een punt aan het begin van een regel weer te geven, waardoor anders de berichttekst wordt beëindigd.
-
%!
-
Hiermee wordt één uitroepteken gegenereerd. Dit kan worden gebruikt om direct na een invoeging een uitroepteken op te geven.
-
%%
-
Hiermee wordt een enkel procentteken gegenereerd.
-
%n
-
Hiermee wordt een vast regeleinde gegenereerd wanneer dit zich aan het einde van een regel voordoet. Dit kan worden gebruikt met FormatMessage- om ervoor te zorgen dat het bericht een bepaalde breedte heeft.
-
%b
-
Hiermee wordt een spatieteken gegenereerd. Dit kan worden gebruikt om een geschikt aantal volgspaties op een regel te garanderen.
-
%r
-
Hiermee wordt een vaste regelterugloop gegenereerd zonder een volgteken voor nieuwe regels.