coUnmarshalInterface 函式 (combaseapi.h)
使用先前呼叫 CoMarshalInterface 函式寫入數據流的數據,初始化新建立的 Proxy,並傳回該 Proxy 的介面指標。
語法
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 函式) ,物件應用程式已與遠端系統中斷連線 (。 |
|
讀取註冊資料庫時發生錯誤。 |
|
針對傳回E_NOINTERFACE的要求介面,此函式的最終 QueryInterface 。 |
備註
重要
安全性注意事項:使用不受信任的數據呼叫此方法是安全性風險。 呼叫此方法時,請一律使用信任的資料。
- 從數據流讀取要用來建立 Proxy 實例的 CLSID。
- 取得 Proxy 的 IMarshal 指標,該 Proxy 會執行取消封存。 如果物件使用 COM 的預設封送處理實作,因此取得的指標是泛型 Proxy 對象的實例。 如果在相同進程中的兩個線程之間發生封送處理,指標會指向同進程可用線程封送處理器的實例。 如果物件提供自己的封送處理程序代碼, CoUnmarshalInterface 會呼叫 CoCreateInstance 函式,並傳遞它從封送處理數據流讀取的 CLSID。 CoCreateInstance 會建立物件的 Proxy 實例,並傳回 Proxy 的 IMarshal 介面指標。
- 根據取得的 IMarshal 介面指標,函式接著會呼叫 IMarshal::UnmarshalInterface ,並視需要呼叫 IMarshal::ReleaseMarshalData。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 專業版 [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows 2000 Server [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | combaseapi.h (包含 Objbase.h) |
程式庫 | Ole32.lib |
Dll | Ole32.dll |