次の方法で共有


CoUnmarshalInterface 関数 (combaseapi.h)

以前の CoMarshalInterface 関数の呼び出しによってストリームに書き込まれたデータを使用して、新しく作成されたプロキシを初期化し、そのプロキシへのインターフェイス ポインターを返します。

構文

HRESULT CoUnmarshalInterface(
  [in]  LPSTREAM pStm,
  [in]  REFIID   riid,
  [out] LPVOID   *ppv
);

パラメーター

[in] pStm

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

[in] riid

マーシャリングされないインターフェイスの識別子への参照。 IID_NULLの場合、返されるインターフェイスはストリーム objref.iid によって定義されたインターフェイスです。

[out] ppv

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

戻り値

この関数は、標準の戻り値E_FAIL、 CoCreateInstance によって返されるエラー、および次の値を返すことができます。

リターン コード 説明
S_OK
インターフェイス ポインターが正常にアンマーシャリングされました。
STG_E_INVALIDPOINTER
pStm は無効なポインターです。
CO_E_NOTINITIALIZED
この関数が呼び出される前に、現在のスレッドで CoInitialize または OleInitialize 関数が呼び出されませんでした。
CO_E_OBJNOTCONNECTED
オブジェクト アプリケーションがリモート処理システムから切断されました (たとえば、 CoDisconnectObject 関数の呼び出しの結果)。
REGDB_E_CLASSNOTREG
登録データベースの読み取り中にエラーが発生しました。
E_NOINTERFACE
要求されたインターフェイスに対するこの関数の最後の QueryInterface がE_NOINTERFACE返されました。

注釈

重要  

セキュリティ上の注意: 信頼されていないデータを使用してこのメソッドを呼び出すことは、セキュリティ上のリスクです。 このメソッドは信頼されたデータでのみ呼び出してください。

 
CoUnmarshalInterface 関数は、次のタスクを実行します。
  1. プロキシのインスタンスを作成するために使用される CLSID をストリームから読み取ります。
  2. マーシャリング解除を実行するプロキシへの IMarshal ポインターを取得します。 オブジェクトが COM の既定のマーシャリング実装を使用する場合、したがって取得されるポインターは汎用プロキシ オブジェクトのインスタンスに対するものです。 同じプロセス内の 2 つのスレッド間でマーシャリングが発生している場合、ポインターはインプロセスフリー スレッド マーシャラーのインスタンスへのポインターになります。 オブジェクトが独自のマーシャリング コードを提供する場合、 CoUnmarshalInterfaceCoCreateInstance 関数を呼び出し、マーシャリング ストリームから読み取った CLSID を渡します。 CoCreateInstance は、オブジェクトのプロキシのインスタンスを作成し、プロキシへの IMarshal インターフェイス ポインターを返します。
  3. 取得した IMarshal インターフェイス ポインターを使用して、関数は IMarshal::UnmarshalInterface を呼び出し、必要に応じて IMarshal::ReleaseMarshalData を呼び出します。
この関数の主な呼び出し元は COM 自体であり、インターフェイス ポインターのマーシャリングを解除するインターフェイス プロキシまたはスタブ内にあります。 ただし、 CoUnmarshalInterface を呼び出す場合もあります。 たとえば、スタブを実装している場合、スタブがメソッド呼び出しでパラメーターとしてインターフェイス ポインターを受信すると、実装で CoUnmarshalInterface が呼び出されます。

要件

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

こちらもご覧ください

CoMarshalInterface

IMarshal::UnmarshalInterface