MIDL の C プリプロセッサ要件

このページは、MIDL で使用されるプリプロセッサとして Microsoft C/C++ プリプロセッサを置き換える特定の理由がある開発者、またはカスタマイズされたプリプロセッサ スイッチを指定する必要がある開発者にのみ適用されます。 MIDL スイッチ /cpp_cmd/cpp_opt、および /no_cpp は、コンパイラの既定の動作をオーバーライドするために使用されます。 通常、Microsoft C/C++ プリプロセッサを置き換えたり、カスタマイズされたプリプロセッサ スイッチを指定したりする理由はありません。

MIDL コンパイラは、IDL ファイルの初期処理中に C プリプロセッサを使用します。 IDL ファイルのコンパイル時に使用されるビルド環境は、既定の C/C++ プリプロセッサに関連付けられます。 別のプリプロセッサを使用する場合は、MIDL コンパイラ スイッチ /cpp_cmd によって、既定の C/C++-プリプロセッサ名のオーバーライドが有効になります。

midl /cpp_cmd preprocessor_name filename

preprocessor_name

MIDL で使用するプリプロセッサの名前を指定します。 バイナリへのパスを指定できます。 .exe拡張機能は省略可能です。

filename

IDL ファイルの名前を指定します。

  • MIDL コンパイラでは、プリプロセッサが次の規則に従う必要があります。
  • 入力ファイルは、コマンド ラインの最後の引数として指定されます。
  • プリプロセッサは、標準出力デバイス stdout に出力をリダイレクトする必要があります。
  • プリプロセッサの出力ストリームには、より優れた診断メッセージを有効にするために 、#line ディレクティブが存在します。
  • 行ディレクティブは、出力ストリーム内の唯一のプリプロセッサ ディレクティブです。

MIDL は、生成されたプリプロセッサがコンパイラの入力ストリームからすべてのプリプロセッサ ディレクティブを削除したと想定します。コンパイラ メッセージ内のソースの場所を特定するために必要な行ディレクティブが発生する場合を除きます。 Microsoft C/C++ プリプロセッサとは異なるプリプロセッサを示す場合、または /cpp_opt スイッチでプリプロセッサ オプションを指定する場合は、コンパイラの入力ストリームに行ディレクティブを配置する適切なプリプロセッサ オプションを指定する必要があります。 たとえば、Microsoft C/C++ プリプロセッサの場合、 /E オプションを使用する必要があります。

midl /cpp_cmd cl.exe /cpp_opt "/E" file.idl

#line ディレクティブは、次のいずれかの形式で MIDL によって受け入れられます。

#line digit-sequence "filename" new-line
 
# digit-sequence "filename" new-line

行ディレクティブとその他のプリプロセッサ ディレクティブの詳細については、使用されている C コンパイラのドキュメントを参照してください。

MIDL は、行プリプロセッサ ディレクティブのみを受け入れます。 したがって、 /no_cpp スイッチを使用する場合は、入力ファイルに他のプリプロセッサ ディレクティブが含まれていないか、MIDL を呼び出す前に入力ファイルが処理されている必要があります。

詳細については、「 IDL ファイルでの#definesの処理」を参照してください。