メッセージ テキスト ファイル
メッセージは、メッセージ テキスト ファイルで定義されます。 メッセージ コンパイラは、各メッセージに番号を割り当て、アプリケーションがシンボリック定数を使用してメッセージにアクセスするために使用できる 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.
;*/
ヘッダー セクション
メッセージ テキスト ファイルには、ファイルの本文のメッセージ定義で使用する名前と言語識別子を定義するヘッダーが含まれています。 ヘッダーには、次のステートメントが 0 個以上含まれています。
ステートメントの構文 | 形容 |
---|---|
MessageIdTypedef=型 | メッセージ定義で次のように使用する型: #define 名前 ((型)0xnnnnnnnn) 型は、DWORDなど、メッセージ コード全体に対応できる十分な大きさである必要があります。 型は、アプリケーションのソース コードで定義された型にすることもできます。 型 の既定値は空であるため、型キャストは使用されません。 このステートメントは、ヘッダーで、メッセージ定義セクションで必要な頻度で指定できます。 |
SeverityNames=(name=number[:name]) | メッセージ定義の重大度に対して許可される名前のセット。 各重大度名に関連付けられた数値は、30 ビットだけ左にシフトすると、ビット パターンを論理 OR に渡し、機能とメッセージ ID 値を使用してメッセージ コードを形成します。 2 ビットに収まらない重大度値はエラーです。 重大度コードには、シンボリック名を付けることもできます。既定値は次のように定義されます。SeverityNames=( Success=0x0 Informational=0x1 Warning=0x2 Error=0x3) |
FacilityNames=(name=number[:name]) | メッセージ定義の機能値に使用できる名前のセット。 各機能名に関連付けられた数値は、16 ビットだけ左にシフトすると、メッセージ コードを形成する重大度とメッセージ ID 値を持つ論理 OR にビット パターンを与える数値です。 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=数値 | メッセージ コンパイラがヘッダー ファイルに書き込むメッセージ定数の出力基数。 存在する場合、この値は -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=名 | C/C++ シンボリック定数をメッセージ コードに関連付けます。 メッセージ定義では、次のように使用されます。 #define 名前 ((型)0xnnnnnnnn) |
OutputBase={数値} | メッセージ 定数の出力基数は、メッセージ コンパイラがヘッダー ファイルに書き込みます。 存在する場合、この値は -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
-
末尾の改行文字を含まないハード キャリッジ リターンを生成します。