/Oi スイッチと /Oic スイッチは、完全に解釈されたマーシャリング メソッドを使用するように MIDL コンパイラに指示します。 /Oicf スイッチには、パフォーマンスの強化が追加されています。
midl /{Oi | Oic | Oif | Oicf}
スイッチ オプション
-
大井
-
クライアントとサーバーの間で渡されるスタブ コードをマーシャリングするための完全に解釈されたメソッドを指定します。
注
このスイッチは廃止されています。 代わりに /Oicf スイッチを使用することをお勧めします。
-
Oic
-
/Oi のすべての機能を提供し、オブジェクト インターフェイスのクライアント スタブ コードのサイズをさらに小さくする、マーシャリングのコードレス プロキシ メソッドを指定します。
注
このスイッチは廃止されています。 代わりに /Oicf スイッチを使用することをお勧めします。
-
Oif または Oicf
-
/Oi と /Oic によって提供されるすべての機能を含むが、/Oi または/Oic よりも優れたパフォーマンスを提供する新しいインタープリター (高速書式指定文字列) を使用するマーシャリングのコードレス プロキシ メソッドを指定します。 このスイッチには最近の RPC の機能強化が含まれており、最新の RPC シナリオに推奨されます。
注釈
サポート プラットフォームに関連する制限事項に注意してください。
MIDL 3.0 コンパイラには、完全に解釈された ( /Oi、 /Oic 、 /Oicf) と混合モード ( /Os) という 2 つのコードをマーシャリングするためのメソッドが用意されています。 MIDL バージョン 6.0.359 以降、MIDL コンパイラは既定で /Oicf/robust スタブを生成します。 一部の言語機能は、一部のモードではサポートされていません。 この場合、コンパイラは自動的に適切なモードに切り替え、警告を発行します。
パフォーマンスに問題がある場合は、混合モード ( /Os) メソッドが最適な方法です。 このモードでは、コンパイラは、生成されたスタブ内の一部のパラメーターをインラインでマーシャリングすることを選択します。 これによりスタブ サイズが大きくなりますが、パフォーマンスが向上します。
完全に解釈されたメソッドは、データを完全にオフラインでマーシャリングします。 これにより、スタブ コードのサイズが大幅に削減されますが、パフォーマンスが低下します。 また、完全に解釈されるメソッドでは、各プロシージャに 16 個のパラメーターの制限があります。 16 個を超えるパラメーターを含むプロシージャは、 /Os モードで自動的に処理されます。 解釈されるモードの中で、 /Oicf は最高のパフォーマンスを提供し、 /Oi は最高の下位互換性を提供します。
アプリケーションで MIDL 3.0 で導入された MIDL 機能 ([wire_marshal] 属性や [user_marshal] 属性など) を使用する場合は、/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
こちらも参照ください