次の方法で共有


特定の 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
    

/target

/robust

async

async_uuid

/Oi

pipe

wire_marshal

user_marshal

マーシャリング OLE データ型