インターフェイス プロキシ ファイル

インターフェイス プロキシ ファイル (U_p.c) は、オブジェクト (COM) インターフェイスのクライアント スタブ ファイルおよびサーバー スタブ ファイルと同等のルーチンを含む C ファイルです。 このファイルには、コンパイラのインライン モードでのクライアントとサーバーのサロゲート ルーチンの実装、または解釈されたモードでの同等のデータとサンクのほか、プロキシやスタブ Vtable などのその他の適切な COM 接着データが含まれています。

インターフェイス プロキシ ファイルには、現在の IDL ファイルで定義されているインターフェイスのメソッドに対してのみサポート ルーチンとデータが含まれています。 この動作を明確にするために、このセクション全体で拡張された例を使用します。 IFaceA から継承する IFaceB などのインターフェイスを使用して IDL ファイルをコンパイルすると、IFaceB 関連の補助データとルーチンが現在のプロキシ ファイルに生成されますが、基本インターフェイス IFaceA 関連の補助データとルーチンは、IFaceA 定義を含む IDL ファイルから生成されたプロキシにあります。 コンパイラは、基本インターフェイスのサロゲートを識別するために必要なすべてのデータを生成し、必要に応じて IFaceB インターフェイスを介して使用される IFaceA メソッドをサポートするためにそれらを委任します。

現在の IDL ファイル内のインターフェイス内のすべてのメソッドについて、プロキシ ファイルには、混合モード (/Os) でコンパイルされた場合は次の 2 つのサロゲート メソッドと、インタープリター モード (/Oi) でコンパイルされた場合の同等のインタープリター データが含まれます。

  • この例のIFaceB_Method_Proxyなどのクライアント側サロゲート。

    このクライアント側サロゲートは、クライアント (IFaceB::Method など) がディスパッチする仮想エントリ ポイントです。 入力引数を送信可能な形式にマーシャリングし、マーシャリングされた引数をインターフェイスと操作を識別する情報と共に送信し、呼び出された操作が返されたときに戻り値と出力引数のマーシャリングを解除します。

  • サーバー側サロゲート (たとえば、 IFaceB_Method_Stub)。

    このサーバー側サロゲートは、基になるランタイムがクライアントをエミュレートするためにサーバーでディスパッチする仮想エントリ ポイントです。 入力引数のマーシャリングを解除してクライアント データをレプリケートし、インターフェイス関数のサーバーの実装を呼び出し、戻り値と出力引数をマーシャリングしてクライアント側に戻します。

file.idl から生成されるプロキシ ファイルの既定の名前は file_p.c. /proxy MIDL コンパイラ スイッチを使用して、インターフェイス プロキシ ファイルの既定の名前をオーバーライドします。 /env スイッチと /out スイッチは、このファイルに影響します。