pragma 属性
#pragma midl_echo ディレクティブは、指定された文字列を引用符なしで生成されたヘッダー ファイルに出力するように MIDL に指示します。
#pragma midl_echo("string")
#pragma token-sequence
#pragma pack (n)
#pragma pack ( [push] [, id] [, n} )
#pragma pack ( [pop] [, id] [, n} )
-
string
-
生成されたヘッダー ファイルに挿入される文字列を指定します。 挿入プロセス中に引用符が削除されます。
-
token-sequence
-
MIDL コンパイラによる処理を行わずに、生成されたヘッダー ファイルに #pragma ディレクティブの一部として挿入されるトークンのシーケンスを指定します。
-
n
-
現在のパック サイズを指定します。 有効値は 1、2、4、8、および 16 です。
-
id
-
ユーザー識別子を指定します。
IDL ファイルに表示される C 言語の前処理ディレクティブは、C コンパイラのプリプロセッサによって処理されます。 IDL ファイル内の #define ディレクティブは MIDL コンパイル中に使用できますが、C コンパイラでは使用できません。
たとえば、プリプロセッサで "windows 4 #define" というディレクティブが検出されると、プリプロセッサは IDL ファイル内のすべての "WINDOWS" を "4" に置き換えます。 シンボル "WINDOWS" は C コンパイル時には使用できません。
C プリプロセッサ マクロ定義が MIDL コンパイラを経由して C コンパイラに渡されるようにするには、 #pragma midl_echo または cpp_quote ディレクティブを 使用します。 これらのディレクティブは、引用符を削除したパラメーター文字列を含むヘッダー ファイルを生成するように MIDL コンパイラに指示します。 #pragma midl_echo ディレクティブと cpp_quote ディレクティブは同等です。
#pragma pack ディレクティブは、構造体のパッキングを制御するために MIDL コンパイラによって使用されます。 /Zp コマンド ライン スイッチをオーバーライドします。 パック (n) オプションは、現在のパック サイズを特定の値 (1、2、4、8、または 16) に設定します。 パック (プッシュ) オプションとパック (ポップ) オプションには、次の特性があります。
- コンパイラはパッキング スタックを維持します。 パッキング スタックの要素には、パック サイズと省略可能な ID が含まれます。スタックは、スタックの上部にある現在のパック サイズを持つ使用可能なメモリによってのみ制限されます。
- パック (プッシュ) により、現在のパック サイズがパッキング スタックにプッシュされます。 スタックは、使用可能なメモリによって制限されます。
- パック (push,n) は、パック (プッシュ) の後にパック (n) が続く場合と同じです。
- パック (push、 id) では、パック サイズと共に id もパッキング スタックにプッシュされます。
- パック (push、 id、 n) は、パック (プッシュ、 ID) の後に pack (n) が続く場合と同じです。
- パック (ポップ) を使用すると、パッキング スタックがポップされます。 ポップが不均衡な場合、警告が発生し、現在のパック サイズがコマンド ライン値に設定されます。
- pack (pop, id, n) が指定されている場合、 n は無視されます。
MIDL コンパイラは、 \cpp_quote ディレクティブと pragma ディレクティブで指定された文字列を、IDL ファイルで指定されたシーケンス内のヘッダー ファイルに配置し、IDL ファイル内の他のインターフェイス コンポーネントに対して相対的に配置します。 通常、文字列は、すべての インポート 操作の後に IDL ファイルの interface-body セクションに表示されます。
MIDL コンパイラは、プレフィックス "midl_" で始まらない #pragma ディレクティブの処理を試みません。IDL ファイル内の他の #pragma ディレクティブは、変更なしで生成されたヘッダー ファイルに渡されます。
/* IDL file */
#pragma midl_echo("#define UNICODE")
cpp_quote("#define __DELAYED_PREPROCESSING__ 1")
#pragma hdrstop
#pragma check_pointer(on)
/* generated header file */
#define UNICODE
#define __DELAYED_PREPROCESSING__ 1
#pragma hdrstop
#pragma check_pointer(on)