/Oi スイッチ

/Oi スイッチと /Oic スイッチは、完全に解釈されたマーシャリング メソッドを使用するように MIDL コンパイラに指示します。 /Oicf スイッチを使用すると、パフォーマンスが強化されます。

midl /{Oi | Oic | Oif | Oicf}

スイッチ オプション

大井

クライアントとサーバーの間で渡されるスタブ コードをマーシャリングするための完全に解釈されるメソッドを指定します。

Note

このスイッチは廃止されました。 代わりに /Oicf スイッチを使用することをお勧めします。

 

Oic

/Oi のすべての機能を提供し、オブジェクト インターフェイスのクライアント スタブ コードのサイズをさらに小さくする、マーシャリングのコードレス プロキシ メソッドを指定します。

Note

このスイッチは廃止されました。 代わりに /Oicf スイッチを使用することをお勧めします。

 

Oif または Oicf

/Oi と /Oic によって提供されるすべての機能を含むが、/Oi または /Oic よりも優れたパフォーマンスを提供する新しいインタープリター (高速書式指定文字列) を使用する、マーシャリングのコードレス プロキシ メソッドを指定します。 このスイッチには最近の RPC の機能強化が含まれており、最新の RPC シナリオに推奨されます。

解説

サポート プラットフォームに関連する制限事項に注意してください。

MIDL 3.0 コンパイラには、コードをマーシャリングするための 2 つのメソッドが用意されています。完全に解釈された ( /Oi/Oic/Oicf) と混合モード ( /Os)。 MIDL バージョン 6.0.359 以降では、MIDL コンパイラによって /Oicf /robust スタブが既定で生成されます。 一部の言語機能は、一部のモードではサポートされていません。 この場合、コンパイラは自動的に適切なモードに切り替え、警告を発行します。

パフォーマンスに問題がある場合は、混合モード ( /Os) メソッドが最適な方法です。 このモードでは、コンパイラは生成されたスタブで一部のパラメーターをインラインでマーシャリングすることを選択します。 これによりスタブ サイズが大きくなりますが、パフォーマンスが向上します。

完全に解釈されたメソッドは、データを完全にオフラインでマーシャリングします。 これにより、スタブ コードのサイズが大幅に削減されますが、結果としてパフォーマンスが低下します。 また、完全に解釈されたメソッドでは、各プロシージャに 16 個のパラメーターの制限があります。 16 個を超えるパラメーターを含むプロシージャは、 /Os モードで自動的に処理されます。 解釈されるモードの中で、 /Oicf は最高のパフォーマンスを提供し、 /Oi は最適な下位互換性を提供します。

[wire_marshal] 属性や [user_marshal] 属性など、MIDL 3.0 で導入された MIDL 機能がアプリケーションで使用されている場合は、/Oif オプション使用できます。 アプリケーションで パイプ を使用する場合は、 /Oif オプションを使用する必要があります。別のモードを指定した場合、MIDL コンパイラは /Oif に切り替わります。

スタブ コードのマーシャリング方法を微調整するために、Microsoft RPC には ACF [optimize] 属性が用意されています。 この属性は、インターフェイス属性または操作属性として使用され、個々のインターフェイスまたは個々の操作のマーシャリング モードを選択します。

呼び出し規則

/Oi/Oic、または /Oif スイッチを使用して解釈されたメソッドで MIDL コンパイラによって生成されたスタブは、C コンパイル時に stdcall または cdecl プロシージャとしてコンパイルする必要があります。 PASCAL または Fastcall 呼び出し規則は機能しません。 さらに、サーバー スタブは stdcall としてコンパイルする必要があります。

midl /Oi filename.idl

midl /Oic filename.idl

midl /Oif filename.idl

関連項目

/堅牢

/no_robust

一般的な MIDL コマンド ライン構文

/Os

最適化

/no_format_opt