Megosztás a következőn keresztül:


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