このページは、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 拡張機能は省略可能です。
-
ファイル名の
-
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 Filesでの #defines の処理」を参照してください。