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、 idn) は、パック (プッシュ、 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)

関連項目

cpp_quote

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

インポート

/Zp