CoMarshalInterface 関数 (combaseapi.h)
一部のクライアント プロセスでプロキシ オブジェクトを初期化するために必要なデータをストリームに書き込みます。
構文
HRESULT CoMarshalInterface(
[in] LPSTREAM pStm,
[in] REFIID riid,
[in] LPUNKNOWN pUnk,
[in] DWORD dwDestContext,
[in, optional] LPVOID pvDestContext,
[in] DWORD mshlflags
);
パラメーター
[in] pStm
マーシャリング中に使用されるストリームへのポインター。 「IStream」を参照してください。
[in] riid
マーシャリングするインターフェイスの識別子への参照。 このインターフェイスは、 IUnknown インターフェイスから派生する必要があります。
[in] pUnk
マーシャリングするインターフェイスへのポインター。 このインターフェイスは、 IUnknown インターフェイスから派生する必要があります。
[in] dwDestContext
指定したインターフェイスをマーシャリングしない宛先コンテキスト。 指定できる値は、列挙 MSHCTX から取得されます。 現在、非マーシャリングは、現在のプロセス (MSHCTX_INPROC) の別のアパートメント、現在のプロセス (MSHCTX_LOCAL) と同じコンピューター上の別のプロセス、または別のコンピューター (MSHCTX_DIFFERENTMACHINE) 上のプロセスで発生する可能性があります。
[in, optional] pvDestContext
このパラメーターは予約済みであり、 NULL である必要があります。
[in] mshlflags
マーシャリングするデータをクライアント プロセスに返送するか (一般的な場合)、グローバル テーブルに書き込むかを指定するフラグ。このフラグは、複数のクライアントで取得できます。 指定できる値は 、MSHLFLAGS 列挙体から取得されます。
戻り値
この関数は、標準の戻り値E_FAIL、E_OUTOFMEMORY、およびE_UNEXPECTED、 IStream によって返されるストリーム アクセス エラー値、および次の値を返すことができます。
リターン コード | 説明 |
---|---|
|
HRESULT は正常にマーシャリングされました。 |
|
この関数が呼び出される前に、現在のスレッドで CoInitialize または OleInitialize 関数が呼び出されませんでした。 |
解説
CoMarshalInterface 関数は、iUnknown 実装が pUnk によって指されているオブジェクトの riid によって参照されるインターフェイスをマーシャリングします。 これを行うには、 CoMarshalInterface 関数は次のタスクを実行します。
- オブジェクトに対して 、IMarshal インターフェイスへのポインターを照会します。 オブジェクトが IMarshal を実装していない場合(つまり、マーシャリングのサポートを提供するために COM に依存している)、 CoMarshalInterface は COM の IMarshal の既定の実装へのポインターを取得します。
- IMarshal::GetUnmarshalClass を呼び出して、返された IMarshal インターフェイス ポインターを使用して、オブジェクトのプロキシの CLSID を取得します。
- マーシャリングに使用するストリームにプロキシの CLSID を書き込みます。
- IMarshal::MarshalInterface を呼び出してインターフェイス ポインターをマーシャリングします。
既存の COM インターフェイスを実装する場合、または Microsoft Interface Definition Language (MIDL) を使用して独自のインターフェイスを定義する場合、MIDL によって生成されたプロキシとスタブは CoMarshalInterface を呼び出します。 独自のプロキシとスタブを記述する場合、プロキシ コードとスタブ コードは、それぞれ CoMarshalInterface を呼び出してインターフェイス ポインターを正しくマーシャリングする必要があります。 プロキシとスタブ コードから IMarshal を直接呼び出すことはお勧めしません。
IMarshal の独自の実装を記述していて、プロキシがプライベート オブジェクトにアクセスする必要がある場合は、ストリームに書き込むデータの一部として、そのオブジェクトへのインターフェイス ポインターを含めることができます。 このような状況では、インターフェイス ポインターを渡すときに COM の既定のマーシャリング実装を使用する場合は、オブジェクトで CoMarshalInterface を呼び出してこれを行うことができます。
要件
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリ |UWP アプリ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリ |UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | combaseapi.h (Objbase.h を含む) |
Library | Ole32.lib |
[DLL] | Ole32.dll |