次の方法で共有


IMarshal::UnmarshalInterface メソッド (objidl.h)

インターフェイス ポインターをアンマーシャリングします。

構文

HRESULT UnmarshalInterface(
  [in]  IStream *pStm,
  [in]  REFIID  riid,
  [out] void    **ppv
);

パラメーター

[in] pStm

インターフェイス ポインターのマーシャリングを解除するストリームへのポインター。

[in] riid

マーシャリングされないインターフェイスの識別子への参照。

[out] ppv

インターフェイス ポインターを受け取るポインター変数のアドレス。 正常に戻ると、*ppv には、非マーシャリングされるインターフェイスの要求されたインターフェイス ポインターが含まれます。

戻り値

このメソッドは、E_FAIL標準の戻り値と、次の値を返すことができます。

リターン コード 説明
S_OK
インターフェイス ポインターが正常にアンマーシャリングされました。
E_NOINTERFACE
指定されたインターフェイスはサポートされていません。

注釈

アンマーシャリングが発生するプロセスの COM ライブラリは、このメソッドのプロキシの実装を呼び出します。

呼び出し元へのメモ

このメソッドを直接呼び出すことはありません。 ただし、 CoUnmarshalInterface の呼び出しによって間接的に呼び出す状況もあります。 たとえば、スタブを実装している場合、スタブがメソッド呼び出しでパラメーターとしてインターフェイス ポインターを受信すると、実装で CoUnmarshalInterface が呼び出されます。

実装者へのメモ

プロキシの実装では、元のオブジェクトの 実装である IMarshal::MarshalInterface によってストリームに書き込まれたデータを読み取り、そのデータを使用して、元のオブジェクトの IMarshal::GetUnmarshalClass の実装に対するマーシャリング スタブの呼び出しによって CLSID が返されたプロキシ オブジェクトを初期化する必要があります。

適切なインターフェイス ポインターを返すために、プロキシの実装では、riid パラメーターと ppv パラメーターを渡して、単に QueryInterface をそれ自体で呼び出すことができます。 ただし、 UnmarshalInterface の実装では、別のオブジェクトを自由に作成でき、必要に応じて、そのオブジェクトへのポインターを返します。

終了する直前に、エラーで終了した場合でも、実装では、読み取られたデータの最後のバイトの直後にストリーム内のシーク ポインターの位置を変更する必要があります。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリ |UWP アプリ]
対象プラットフォーム Windows
ヘッダー objidl.h (ObjIdl.h を含む)

こちらもご覧ください

CoUnmarshalInterface

IMarshal