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 コンパイラでは使用できません。

たとえば、プリプロセッサで "#define WINDOWS 4" というディレクティブが検出されると、プリプロセッサは 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 が含まれます。スタックは、スタックの上部にある現在のパック サイズを持つ使用可能なメモリによってのみ制限されます。
  • パック (プッシュ) を実行すると、現在のパック サイズがパッキング スタックにプッシュされます。 スタックは、使用可能なメモリによって制限されます。
  • パック (プッシュ、n) は、パック (プッシュ) の後にパック (n) が続く場合と同じです。
  • パック (プッシュ、 ID) もパック サイズと共にパッキング スタックに ID をプッシュします。
  • パック (プッシュ、 IDn) は、パック (プッシュ、 ID) の後にパック (n) が続く場合と同じです。
  • パック (ポップ) を実行すると、パッキング スタックがポップされます。 ポップがアンバランスの場合、警告が発生し、現在のパック サイズがコマンド ライン値に設定されます。
  • pack (pop, id, n) が指定されている場合、 n は無視されます。

MIDL コンパイラは、 \cpp_quote および pragma ディレクティブで指定された文字列を、IDL ファイルで指定されたシーケンス内のヘッダー ファイルに配置し、IDL ファイル内の他のインターフェイス コンポーネントを基準にして配置します。 通常、文字列は、 すべてのインポート 操作の後に IDL ファイルのインターフェイス本文セクションに表示されます。

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)

関連項目

cpp_quote

インターフェイス定義 (IDL) ファイル

インポート

/Zp