共用方式為


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 傳回的錯誤,以及下列值。

傳回碼 描述
S_OK
介面指標已成功解除封入。
STG_E_INVALIDPOINTER
pStm 是無效的指標。
CO_E_NOTINITIALIZED
呼叫此函式之前,目前線程上未呼叫 CoInitializeOleInitialize 函式。
CO_E_OBJNOTCONNECTED
例如,由於 呼叫 CoDisconnectObject 函式) ,物件應用程式已與遠端系統中斷連線 (。
REGDB_E_CLASSNOTREG
讀取註冊資料庫時發生錯誤。
E_NOINTERFACE
針對傳回E_NOINTERFACE的要求介面,此函式的最終 QueryInterface

備註

重要  

安全性注意事項:使用不受信任的數據呼叫此方法是安全性風險。 呼叫此方法時,請一律使用信任的資料。

 
CoUnmarshalInterface 函式會執行下列工作:
  1. 從數據流讀取要用來建立 Proxy 實例的 CLSID。
  2. 取得 Proxy 的 IMarshal 指標,該 Proxy 會執行取消封存。 如果物件使用 COM 的預設封送處理實作,因此取得的指標是泛型 Proxy 對象的實例。 如果在相同進程中的兩個線程之間發生封送處理,指標會指向同進程可用線程封送處理器的實例。 如果物件提供自己的封送處理程序代碼, CoUnmarshalInterface 會呼叫 CoCreateInstance 函式,並傳遞它從封送處理數據流讀取的 CLSID。 CoCreateInstance 會建立物件的 Proxy 實例,並傳回 Proxy 的 IMarshal 介面指標。
  3. 根據取得的 IMarshal 介面指標,函式接著會呼叫 IMarshal::UnmarshalInterface ,並視需要呼叫 IMarshal::ReleaseMarshalData
此函式的主要呼叫端是 COM 本身,從介面 Proxy 或存根內取消連接介面指標。 不過,在某些情況下,您可能會呼叫 CoUnmarshalInterface。 例如,如果您要實作存根,則實作會在 Stub 收到介面指標做為方法呼叫中的參數時呼叫 CoUnmarshalInterface

規格需求

需求
最低支援的用戶端 Windows 2000 專業版 [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows 2000 Server [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 combaseapi.h (包含 Objbase.h)
程式庫 Ole32.lib
Dll Ole32.dll

另請參閱

CoMarshalInterface

IMarshal::UnmarshalInterface