Üzenetszövegfájlok
Az üzenetek egy üzenetszövegfájlban vannak definiálva. Az üzenetfordító számokat rendel az egyes üzenetekhez, és létrehoz egy C/C++ belefoglalási fájlt, amellyel az alkalmazás egy szimbolikus állandó használatával hozzáférhet egy üzenethez.
Az üzenetszövegfájlban lévő utasítások általános szintaxisa a következő:
kulcsszó=értéke
Az egyenlőségjel körüli szóközök figyelmen kívül lesznek hagyva, és az értéket a következő kulcsszó/érték pár szóközzel (beleértve a sortöréseket is) elválasztja. A kis- és nagybetűket figyelmen kívül hagyja a kulcsszónevek összehasonlításakor. A érték rész lehet egy C/C++ szintaxist használó numerikus egész számállandó, a C/C++ azonosítók szabályait követő szimbólumnév, vagy egy 8 karakterből vagy annál kevesebb karakterből, pont nélküli fájlnévből.
Példaüzenetfájl: Üzenetszöveg-mintafájl.
Megjegyzések
Az üzenet szövegfájljában megjegyzéssorok engedélyezettek. Pontosvessző (;) a sor végén végződő megjegyzést kezd. Kövesse a pontosvesszőt egy C/C++ egysoros megjegyzésjelölővel (//), hogy az üzenetfordító által létrehozott fejlécfájl lefordítva legyen az alkalmazásban.
;// This is a single-line comment.
Blokkkommentár esetén minden sort pontosvesszővel kezdje, majd helyezzen egy C/C++ nyitott blokkkommentár-jelzőt (/*) az első sor pontosvesszője után, majd a záró blokk megjegyzésjelzőt (*/) az utolsó sor pontosvesszője után.
;/* This is a block comment.
; It spans multiple lines.
;*/
Fejlécszakasz
Az üzenetszövegfájl egy fejlécet tartalmaz, amely a fájl törzsében található üzenetdefiníciók által használt neveket és nyelvi azonosítókat határozza meg. A fejléc a következő utasítások közül nullát vagy többet tartalmaz.
Utasítás szintaxisa | Leírás |
---|---|
MessageIdTypedef=típus | Az üzenetdefinícióban használandó típus a következő: #define név ((típus)0xnnnnnnnnn) A típusnak elég nagynak kell lennie ahhoz, hogy elférjen a teljes üzenetkód, például egy DWORD. A típus az alkalmazás forráskódjában definiált típus is lehet. A típusú alapértelmezett értéke üres, ezért a rendszer nem használ típusbeosztást. Ez az utasítás megadható a fejlécben, és szükség esetén az üzenetdefiníciós szakaszban. |
SeverityNames=(név=szám[:név]) | Az üzenetdefiníció súlyosságához engedélyezett nevek halmaza. Az egyes súlyossági nevekhez egy szám tartozik, amely 30 bittel balra tolva a bitmintát logikai vagy a létesítmény és az üzenetazonosító értékével adja meg az üzenetkód létrehozásához. Minden olyan súlyossági érték, amely nem fér el 2 bitben, hiba. A súlyossági kódok szimbolikus neveket is megadhatnak. Az alapértelmezett érték a következő: SeverityNames=( Success=0x0 Informational=0x1 Warning=0x2 Error=0x3) |
FacilityNames=(név=szám[:név]) | Az üzenetdefinícióban szereplő létesítményértékek számára engedélyezett nevek halmaza. Az egyes létesítménynevekhez egy szám tartozik, amely 16 bittel balra tolva a bitmintát logikai vagy súlyossági és üzenetazonosító értékekkel adja meg az üzenetkód létrehozásához. Minden olyan létesítményérték, amely nem fér el 12 bitben, hiba. Ez 4096 létesítménykódot tesz lehetővé; az első 256 kód rendszerhasználatra van fenntartva. A létesítménykódok szimbolikus neveket is megadhatnak. Az alapértelmezett érték a következőképpen van definiálva: FacilityNames=( System=0x0FF Application=0xFFF) |
LanguageNames=(név=szám:fájlnév) | Az üzenetdefiníció nyelvi értékei számára engedélyezett nevek halmaza. A szám az erőforrástábla nyelvazonosítójaként használatos. A megadott fájl az adott nyelvhez tartozó üzeneteket tartalmazza. Ez általában az üzenetfordító által létrehozott .bin fájl. Példaérték: LanguageNames=(English=0x409:MSG00409) A nyelvi azonosítók listájáért lásd: https://go.microsoft.com/fwlink/p/?linkid=190280. |
OutputBase=szám | Az üzenetkonstansok kimeneti radixja, amelyet az üzenetfordító a fejlécfájlba ír. Ha jelen van, ez az érték felülbírálja a -d kapcsolót. Ez a szám lehet 10 (decimális) vagy 16 (hexadecimális). |
Üzenetdefiníciók
Az üzenetszövegfájl a fejlécszakaszt követő nulla vagy több üzenetdefiníciót tartalmaz. Az alábbi táblázat az üzenetdefiníciós utasításokat ismerteti. A MessageId utasítás az üzenetdefiníció elejét jelöli. A súlyossági és létesítmény-utasítások megadása nem kötelező.
Utasítás szintaxisa | Leírás |
---|---|
MessageId=[szám|+szám] | Az üzenet azonosítója. Ez az utasítás kötelező, bár az érték nem kötelező. Ha nincs megadva érték, a használt érték a létesítmény előző értéke, plusz egy. Ha az érték pluszjellel van megadva, a használt érték a létesítmény előző értéke, plusz a pluszjel utáni szám. A megadott értékeknek 16 bitben kell elférniük. Az üzenet értékének súlyosságból, létesítményből és üzenetazonosítóból való keletkezéséről további információt a Winerror.h diagramjában talál. Ez a fejlécfájl a rendszer hibakódjait határozza meg. |
Súlyosság =név | A fejléc Súlyossági nevei által megadott értékek egyike. Ez az utasítás nem kötelező. Ha nincs megadva érték, a használt érték az üzenetdefinícióhoz utoljára megadott érték. Az első üzenetdefiníció alapértelmezett értéke Severity=Success |
Facility=név | Az FacilityNames által megadott értékek egyike a fejlécben. Ez az utasítás nem kötelező. Ha nincs megadva érték, a használt érték az üzenetdefinícióhoz utoljára megadott érték. Az első üzenetdefiníció alapértelmezett értéke Facility=Application |
SymbolicName=név | C/C++ szimbolikus állandót társít az üzenetkódhoz. A következő üzenetdefinícióban használatos: #define név ((típus)0xnnnnnnn) |
OutputBase={szám} | Az üzenet kimeneti radix értéke állandósul, amikor az üzenet fordítója a fejlécfájlba ír. Ha jelen van, ez az érték felülbírálja a -d kapcsolót. Ez a szám lehet 10 (decimális) vagy 16 (hexadecimális). |
Language=név | A LanguageNames által megadott értékek egyike a fejlécben. Ez az utasítás nem kötelező. Ha nincs megadva érték, a használt érték az üzenetdefinícióhoz utoljára megadott érték. Az első üzenetdefiníció alapértelmezett értéke a következő: Language=English |
üzenetszöveg | Az üzenet szövege. Ez szerepel az üzenet bináris fájljában. Az üzenetdefiníciót közvetlenül megelőző megjegyzésblokk fejlécfájljában is szerepel. |
. | Az üzenet szövegét egy új sor szakítja meg, amely egyetlen pontot tartalmaz a sor elején. |
Ha az üzenetdefiníció több nyelv üzenetszövegét is tartalmazza, minden nyelvnek saját nyelvi utasításra, üzenetszövegre és új sor ponttal való megszüntetésére van szüksége. Például:
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>
.
Az alábbi feloldósorozatokat adhatja meg az üzenet szövegének formázásához az eseménynapló vagy az alkalmazás számára. A százalékjel karakter (%) az összes feloldósorozatot elindítja. A százalékjelet követő többi karakter a százalékjel nélkül jelenik meg.
-
% n[!format_specifier!]
-
Egy beszúrást ír le. Minden beszúrás egy bejegyzés a FormatMessage függvény Argumentumok tömbjében. Az n értéke 1 és 99 közötti szám lehet. A formátumjelölő nem kötelező. Ha nincs megadva érték, az alapértelmezett érték a !s!. A formátumkijelölőről további információt a wsprintfcímű cikkben talál.
A formátumjelölő a *-t használhatja a pontossághoz vagy a szélességhez. Ha meg van adva, számozott beszúrásokat használnak n+1 és n+2.
-
%0
-
Egy üzenet szövegsorának leállítását követő újvonalas karakter nélkül. Ez egy hosszú sor létrehozására vagy egy parancssori üzenet záró újvonalas karakter nélküli leállítására használható.
-
%.
-
Egyetlen időszakot hoz létre. Ez egy pont megjelenítésére használható egy sor elején, amely egyébként leállítja az üzenet szövegét.
-
%!
-
Egyetlen felkiáltójelet hoz létre. Ez felkiáltójel megadására használható közvetlenül a beszúrás után.
-
%%
-
Egyetlen százalékjelet hoz létre.
-
%n
-
Kemény vonaltörést hoz létre, amikor egy sor végén történik. Ez FormatMessage használatával biztosíthatja, hogy az üzenet egy bizonyos szélességű legyen.
-
%b
-
Szóköz karaktert hoz létre. Ezzel biztosítható, hogy a vonalon megfelelő számú záró szóköz legyen.
-
%r
-
Rögzített kocsivisszahozadást hoz létre záró újvonalas karakter nélkül.