特定の 32 ビットまたは 64 ビット プラットフォームのスタブのターゲット設定
Microsoft RPC および MIDL 3.0 以降のコンパイラの機能の一部は、プラットフォーム固有です。
予防措置として、MIDL 3.0 以降のコンパイラは、C コンパイル フェーズでの互換性チェックを容易にするガードを生成します。 MIDL では、プラットフォーム依存ガード (32 ビットと 64 ビット) とリリース依存ガード (機能セットの依存関係) の 2 種類のガードが生成されます。 たとえば、MIDL は、他のプラットフォームの 32 ビット スタブの C コンパイルを防ぐために、次のようなガードを生成します。
#if !defined(__RPC_WIN32__)
#error Invalid build platform for this stub.
#endif
リリース依存ガードは、処理された IDL ファイル内にある一連の機能と /target スイッチによってトリガーされます。 たとえば、インターフェイスが Windows 2000 以降でのみサポートされている機能を使用している場合、MIDL は TARGET_IS_NT50_OR_LATER マクロを使用してガードを生成します。
Rpcndr.h で定義されているガード マクロは、WINVER と _WIN32_WINNT の設定に依存し、C/C++ コンパイラによって評価されます。
C コンパイル時に、スタブを実行するために特定のプラットフォームが必要であることを示すエラー メッセージが表示される場合は、まず、このプラットフォームで使用できない機能を使用していないことを確認してください。 特定のガードをトリガーする機能は、ガードの本体に一覧表示されます。 前の例では、-Oicf コンパイラ スイッチでガードがトリガーされました。 この種の注目すべき機能には、Windows 2000 以降で利用可能な pipe 型コンストラクター、/Oif コンパイラ オプション、および [user_marshal] 属性、[wire_marshal] 属性では、/robust スイッチと [async] 属性があります。 これらの機能を使用するスタブは、以前のシステムでは実行できなくなります。
使用している機能に対してターゲット プラットフォームが正しいことを把握していてもエラーが発生する場合は、環境変数を適切に設定する必要がある場合があります。
Windows 2000 以降のリリース用にビルドするには
メイクファイルに次の行を追加します。
CFLAGS = $(CFLAGS) -D_WIN32_WINNT=0x500
関連トピック