メッセージ テキスト ファイル
メッセージは、メッセージ テキスト ファイルで定義されます。 メッセージ コンパイラは、各メッセージに番号を割り当て、アプリケーションがシンボリック定数を使用してメッセージにアクセスするために使用できる C/C++ インクルード ファイルを生成します。
メッセージ テキスト ファイル内のステートメントの一般的な構文は次のとおりです。
=キーワード (keyword)value
等号の周囲のスペースは無視され、値は次のキーワード (keyword)/値ペアの空白 (改行を含む) で区切られます。 キーワード (keyword)名と比較する場合、大文字と小文字は無視されます。 値部分には、C/C++ 構文を使用した数値整数定数、C/C++ 識別子の規則に従うシンボル名、またはピリオドを含まない 8 文字以下のファイル名を指定できます。
メッセージ ファイルの例については、「 サンプル メッセージ テキスト ファイル」を参照してください。
説明
コメント行は、メッセージ テキスト ファイルで使用できます。 セミコロン (;)は、行の末尾で終わるコメントを開始します。 メッセージ コンパイラによって生成されたヘッダー ファイルがアプリケーションでコンパイルされるように、セミコロンに C/C++ の単一行コメント インジケーター (//) を付けます。
;// This is a single-line comment.
ブロック コメントの場合は、各行をセミコロンで始め、最初の行のセミコロンの後に C/C++ オープン ブロック コメント インジケーター (/*) を、最後の行のセミコロンの後に閉じるブロック コメント インジケーター (*/) を配置します。
;/* This is a block comment.
; It spans multiple lines.
;*/
ヘッダー セクション
メッセージ テキスト ファイルには、ファイルの本文のメッセージ定義で使用する名前と言語識別子を定義するヘッダーが含まれています。 ヘッダーには、次のステートメントが 0 個以上含まれています。
ステートメントの構文 | 説明 |
---|---|
MessageIdTypedef=type | メッセージ定義で次のように使用する型: #define 名 ((type)0xnnnnnnnn) 型は、 DWORD などのメッセージ コード全体に対応できる十分な大きさである必要があります。 型は、アプリケーションのソース コードで定義された型にすることもできます。 型の既定値は空であるため、型キャストは使用されません。 このステートメントは、ヘッダーで指定でき、メッセージ定義セクションで必要な頻度で指定できます。 |
SeverityNames=(name=number[:name]) | メッセージ定義の重大度に対して許可される名前のセット。 各重大度名に関連付けられた数値は、30 ビットだけ左にシフトすると、ビット パターンを論理 OR に渡し、機能とメッセージ ID の値を使用してメッセージ コードを形成します。 2 ビットに収まらない重大度値はエラーです。 重大度コードには、シンボリック名を付けることもできます。既定値は、SeverityNames=( Success=0x0 Informational=0x1 Warning=0x2 Error=0x3) として定義されます。 |
FacilityNames=(name=number[:name]) | メッセージ定義内の機能値に対して許可される名前のセット。 各機能名に関連付けられた数値は、16 ビットだけ左にシフトすると、ビット パターンを論理 OR に渡し、重大度とメッセージ ID 値を指定してメッセージ コードを形成します。 12 ビットに収まらないファシリティ値は、エラーです。 これにより、4096 のファシリティ コードが可能になります。最初の 256 コードは、システム使用のために予約されています。 機能コードには、シンボリック名を付けることもできます。既定値は、FacilityNames=( System=0x0FF Application=0xFFF) として定義されます。 |
LanguageNames=(name=number:filename) | メッセージ定義の言語値に使用できる名前のセット。 数値は、リソース テーブルの言語識別子として使用されます。 指定されたファイルには、その言語のメッセージが含まれています。 通常は、メッセージ コンパイラによって生成される .bin ファイルです。 値の例: LanguageNames=(English=0x409:MSG00409) 言語識別子の一覧については、「」を参照してください https://go.microsoft.com/fwlink/p/?linkid=190280。 |
OutputBase=number | メッセージ コンパイラがヘッダー ファイルに書き込むメッセージ定数の出力基数。 存在する場合、この値は -d スイッチをオーバーライドします。 この数値には、10 (10 進数) または 16 (16 進数) のいずれかを指定できます。 |
メッセージ定義
メッセージ テキスト ファイルには、ヘッダー セクションの後に 0 個以上のメッセージ定義が含まれています。 次の表では、メッセージ定義ステートメントについて説明します。 MessageId ステートメントは、メッセージ定義の先頭をマークします。 Severity ステートメントと Facility ステートメントは省略可能です。
ステートメントの構文 | 説明 |
---|---|
MessageId=[number|+number] | メッセージの識別子。 このステートメントは必須ですが、値は省略可能です。 値が指定されていない場合、使用される値は、施設の前の値に 1 を加えた値です。 値が正符号で指定されている場合、使用される値は施設の前の値にプラス記号の後の数値を加算します。 指定する値は、16 ビットに収まる必要があります。重大度、機能、およびメッセージ ID からメッセージ値を形成する方法の詳細については、Winerror.h の図を参照してください。 このヘッダー ファイルは、システムのエラー コードを定義します。 |
Severity=name | ヘッダーの SeverityNames で指定された値の 1 つ。 このステートメントは省略可能です。 値が指定されていない場合、使用される値はメッセージ定義に最後に指定された値です。 最初のメッセージ定義の既定値は です。 Severity=Success |
Facility=name | ヘッダーの FacilityNames で指定された値の 1 つ。 このステートメントは省略可能です。 値が指定されていない場合、使用される値はメッセージ定義に最後に指定された値です。 最初のメッセージ定義の既定値は です。 Facility=Application |
SymbolicName=name | C/C++ シンボリック定数をメッセージ コードに関連付けます。 メッセージ定義では、#define 名 ((型)0xnnnnnnnn) として使用されます。 |
OutputBase={number} | メッセージ コンパイラがヘッダー ファイルに書き込むメッセージ定数の出力基数。 存在する場合、この値は -d スイッチをオーバーライドします。 この数値には、10 (10 進数) または 16 (16 進数) のいずれかを指定できます。 |
Language=name | ヘッダーの LanguageNames で指定された値の 1 つ。 このステートメントは省略可能です。 値が指定されていない場合、使用される値はメッセージ定義に最後に指定された値です。 最初のメッセージ定義の既定値は次のとおりです。 Language=English |
メッセージ テキスト | メッセージのテキスト。 これはメッセージ バイナリ ファイルに含まれています。 また、メッセージ定義の直前にあるコメント ブロックのヘッダー ファイルにも含まれます。 |
. | メッセージ テキストは、行の先頭に 1 つのピリオドを含む新しい行で終了します。 |
メッセージ定義に複数の言語のメッセージ テキストが含まれている場合、各言語には、独自の 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
-
末尾の改行文字を含まないメッセージ テキスト行を終了します。 これは、長い行を作成したり、末尾の改行文字なしでプロンプト メッセージを終了したりするために使用できます。
-
%.
-
1 つの期間を生成します。 これは、行の先頭にピリオドを表示する場合に使用でき、それ以外の場合はメッセージ テキストを終了します。
-
%!
-
単一の感嘆符を生成します。 これは、挿入の直後に感嘆符を指定するために使用できます。
-
%%
-
1 つのパーセント記号を生成します。
-
%n
-
改行が行末に発生したときに改行を生成します。 これは FormatMessage と共に使用して、メッセージが一定の幅に収まるようにすることができます。
-
%b
-
スペース文字を生成します。 これは、1 行に適切な数の末尾のスペースを確保するために使用できます。
-
%r
-
改行文字を含まないハード キャリッジ リターンを生成します。