/Oi スイッチ
/Oi スイッチと /Oic スイッチは、完全に解釈されたマーシャリング メソッドを使用するように MIDL コンパイラに指示します。 /Oicf スイッチを使用すると、パフォーマンスが強化されます。
midl /{Oi | Oic | Oif | Oicf}
-
大井
-
クライアントとサーバーの間で渡されるスタブ コードをマーシャリングするための完全に解釈されるメソッドを指定します。
注意
このスイッチは廃止されました。 代わりに /Oicf スイッチを使用することをお勧めします。
-
Oic
-
/Oi のすべての機能を提供し、オブジェクト インターフェイスのクライアント スタブ コードのサイズをさらに小さくする、マーシャリングのコードレス プロキシ メソッドを指定します。
注意
このスイッチは廃止されました。 代わりに /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