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 によって返されるエラー、および次の値を返すことができます。
リターン コード | 説明 |
---|---|
|
インターフェイス ポインターが正常にアンマーシャリングされました。 |
|
pStm は無効なポインターです。 |
|
この関数が呼び出される前に、現在のスレッドで CoInitialize または OleInitialize 関数が呼び出されませんでした。 |
|
オブジェクト アプリケーションがリモート処理システムから切断されました (たとえば、 CoDisconnectObject 関数の呼び出しの結果)。 |
|
登録データベースの読み取り中にエラーが発生しました。 |
|
要求されたインターフェイスに対するこの関数の最後の QueryInterface がE_NOINTERFACE返されました。 |
注釈
重要
セキュリティ上の注意: 信頼されていないデータを使用してこのメソッドを呼び出すことは、セキュリティ上のリスクです。 このメソッドは信頼されたデータでのみ呼び出してください。
- プロキシのインスタンスを作成するために使用される CLSID をストリームから読み取ります。
- マーシャリング解除を実行するプロキシへの IMarshal ポインターを取得します。 オブジェクトが COM の既定のマーシャリング実装を使用する場合、したがって取得されるポインターは汎用プロキシ オブジェクトのインスタンスに対するものです。 同じプロセス内の 2 つのスレッド間でマーシャリングが発生している場合、ポインターはインプロセスフリー スレッド マーシャラーのインスタンスへのポインターになります。 オブジェクトが独自のマーシャリング コードを提供する場合、 CoUnmarshalInterface は CoCreateInstance 関数を呼び出し、マーシャリング ストリームから読み取った CLSID を渡します。 CoCreateInstance は、オブジェクトのプロキシのインスタンスを作成し、プロキシへの IMarshal インターフェイス ポインターを返します。
- 取得した IMarshal インターフェイス ポインターを使用して、関数は IMarshal::UnmarshalInterface を呼び出し、必要に応じて IMarshal::ReleaseMarshalData を呼び出します。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリ |UWP アプリ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリ |UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | combaseapi.h (Objbase.h を含む) |
Library | Ole32.lib |
[DLL] | Ole32.dll |