消息文字檔

訊息定義于訊息文字檔中。 訊息編譯器會將數位指派給每個訊息,並產生 C/C++ 包含檔案,讓應用程式可用來使用符號常數來存取訊息。

訊息文字檔中語句的一般語法如下:

關鍵 字=價值

忽略等號周圍的空格,且值會以空白字元分隔, (包括下一個關鍵字/值組的分行符號) 。 比較關鍵字名稱時,會忽略大小寫。 部分可以是使用 C/C++ 語法的數值整數常數、遵循 C/C++ 識別碼規則的符號名稱,或是具有 8 個字元或更少且不含句點的檔案名。

如需範例訊息檔,請參閱 範例訊息文字檔

註解

訊息文字檔中允許批註行。 分號 (;) 會開始在行尾端結束的批註。 依照 C/C++ 單行批註指標的分號 (//) ,讓訊息編譯器所產生的標頭檔會在您的應用程式中編譯。

;// This is a single-line comment.

針對區塊批註,請以分號開始每一行,然後將 C/C++ 開啟的區塊批註指標放在第一行的分號之後 (/*) ,並在最後一行的分號後面 (*/) 。

;/* This is a block comment.
;   It spans multiple lines.
;*/

標頭區段

訊息文字檔包含標頭,定義名稱與語言識別項,以供檔案本文中的訊息定義使用。 標頭包含下列語句的零個或多個 。

語句語法 Description
MessageIdTypedef=type 在訊息定義中使用的類型,如下所示:#define name ( (type) 0xnnnn)
此類型必須夠大,才能容納整個訊息程式碼,例如 DWORD。 此類型也可以是應用程式原始程式碼中定義的類型。 類型的預設值是空的,因此不會使用類型轉換。
您可以在標頭中指定此語句,並在訊息定義區段中視需要指定。
SeverityNames= (name=number[:name]) 訊息定義中嚴重性允許的名稱集。 與每個嚴重性名稱相關聯的數位是一個數位,當向左移 30 位時,會以設備與訊息識別碼值來提供邏輯模式給邏輯 OR,以形成訊息碼。 任何不符合 2 位的嚴重性值都是錯誤。 嚴重性代碼也可以指定符號名稱。預設值的定義如下:SeverityNames= ( Success=0x0 Informational=0x1 Warning=0x2 Error=0x3)
FacilityNames= (name=number[:name]) 訊息定義中設備值允許的名稱集。 與每個設施名稱相關聯的數位是一個數位,當向左移 16 位時,會將位模式提供給邏輯-OR,其中包含嚴重性和訊息識別碼值,以形成訊息碼。 不符合 12 位的任何設備值都是錯誤。 這允許 4096 設施代碼;前 256 個代碼會保留供系統使用。 設施代碼也可以指定符號名稱。預設值的定義如下:FacilityNames= ( System=0x0FF Application=0xFFF)
LanguageNames= (name=numberfilename) 訊息定義中語言值允許的名稱集。 數位會當做資源資料表中的語言識別項使用。 指定的檔案包含該語言的訊息。 它通常是訊息編譯器所產生的 .bin 檔案。
範例值為:LanguageNames= (English=0x409:MSG00409)
如需語言識別項的清單,請參閱 https://go.microsoft.com/fwlink/p/?linkid=190280
OutputBase=number 訊息編譯器寫入標頭檔之訊息常數的輸出半徑。 如果存在,這個值會覆寫 -d 參數。 這個數位可以是 10 (十進位) 或 16 (十六進位) 。

訊息定義

消息文字檔包含標頭區段後面的零個或多個訊息定義。 下表描述訊息定義語句。 MessageId 語句會標示訊息定義的開頭。 [嚴重性] 和 [設備] 語句是選擇性的。

語句語法 Description
MessageId=[number number|+ ] 訊息的識別碼。 雖然值是選擇性的,但這是必要語句。 如果未指定任何值,則所使用的值是設施的先前值,加上一個值。 如果使用加號指定值,則所使用的值會是設施的先前值,加上加號之後的數位。 任何指定的值都必須符合 16 位。如需如何從嚴重性、設施及訊息識別碼形成訊息值的詳細資訊,請參閱 Winerror.h 中的圖表。 此標頭檔會定義系統的錯誤碼。
Severity=name 標頭中 SeverityNames 指定的其中一個值。 此語句是選擇性的。 如果未指定任何值,則所使用的值是訊息定義最後指定的值。 第一個訊息定義的預設值為 Severity=Success
Facility=name 標頭中由 FacilityNames 指定的其中一個值。 此語句是選擇性的。 如果未指定任何值,則所使用的值是訊息定義最後指定的值。 第一個訊息定義的預設值為 Facility=Application
SymbolicName=name 建立 C/C++ 符號常數與訊息碼的關聯。 它用於訊息定義,如下所示:#define name ( (type) 0xnnnn)
OutputBase={number} 訊息編譯器寫入標頭檔之訊息常數的輸出半徑。 如果存在,這個值會覆寫 -d 參數。 這個數位可以是 10 (十進位) 或 16 (十六進位) 。
Language=name 標頭中 LanguageNames 指定的其中一個值。 此語句是選擇性的。 如果未指定任何值,則所使用的值是訊息定義最後指定的值。 第一個訊息定義的預設值如下: Language=English
郵件內文 訊息的文字。 它包含在訊息二進位檔中。 它也會包含在批註區塊的標頭檔內,該檔案會直接包含在訊息定義之前。
. 郵件內文會由包含行開頭的單一句點的新行終止。

如果訊息定義包含多個語言的訊息文字,則每個語言都需要自己的 Language 語句、郵件內文,以及以句號終止新行。 例如:

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

您可以指定下列逸出序列來格式化郵件內文,以供事件檢視器或應用程式使用。 百分比符號字元 (%) 開始所有逸出序列。 在百分比符號之後的任何其他字元都會顯示,而不顯示百分比符號。

%n[!format_specifier!]

描述插入。 每個插入都是 FormatMessage 函式之 Arguments 陣列中的專案。 n的值可以是介於 1 到 99 之間的數位。 格式規範是選擇性的。 如果未指定任何值,則預設值為 !s!。 如需格式規範的相關資訊,請參閱 wsprintf

格式規範可以使用 * 表示有效位數或寬度。 指定時,會取用編號 為 n+1 和 n+2 的插入。

%0

結束郵件內文行,而不使用尾端分行符號。 這可用來建置長行或終止提示訊息,而不需尾端分行符號。

%.

產生單一期間。 這可以用來在行開頭顯示句點,否則會終止郵件內文。

%!

產生單一驚嘆號。 這可以用來在插入之後立即指定驚嘆號。

%%

產生單一百分比符號。

%n

在行尾發生時產生硬式分行符號。 這可以與 FormatMessage 搭配使用,以確保訊息符合特定寬度。

%b

產生空白字元。 這可用來確保行上適當的尾端空格數目。

%r

產生沒有尾端分行符號的硬式歸位字元。