coMarshalInterface 函式 (combaseapi.h)
寫入資料流程,這是在某些用戶端進程中初始化 Proxy 物件所需的資料。
語法
HRESULT CoMarshalInterface(
[in] LPSTREAM pStm,
[in] REFIID riid,
[in] LPUNKNOWN pUnk,
[in] DWORD dwDestContext,
[in, optional] LPVOID pvDestContext,
[in] DWORD mshlflags
);
參數
[in] pStm
封送處理期間所要使用的資料流程指標。 請參閱 IStream。
[in] riid
要封送處理之介面識別碼的參考。 這個介面必須衍生自 IUnknown 介面。
[in] pUnk
要封送處理之介面的指標。 這個介面必須衍生自 IUnknown 介面。
[in] dwDestContext
指定介面要取消封封的目的地內容。 可能的值來自列舉 MSHCTX。 目前,取消封存可能會發生在目前進程 (MSHCTX_INPROC) 的另一個 Apartment、與目前進程 (MSHCTX_LOCAL) 位於相同電腦上的另一個進程,或在不同的電腦上 (MSHCTX_DIFFERENTMACHINE) 。
[in, optional] pvDestContext
此參數是保留的,而且必須是 Null。
[in] mshlflags
旗標,指定要封送處理的資料是否要傳送回用戶端進程, (一般案例) 或寫入全域資料表,供多個用戶端擷取。 可能的值來自 MSHLFLAGS 列舉。
傳回值
此函式可以傳回標準傳回值E_FAIL、E_OUTOFMEMORY和E_UNEXPECTED、 IStream傳回的資料流程存取錯誤值,以及下列值。
傳回碼 | 描述 |
---|---|
|
已成功封送處理 HRESULT 。 |
|
呼叫此函式之前,目前線程上未呼叫 CoInitialize 或 OleInitialize 函式。 |
備註
CoMarshalInterface函式會將iUnknown 實作指向 pUnknown實作的物件上 riid 所參考的介面封送處理。 若要這樣做, CoMarshalInterface 函式會執行下列工作:
- 查詢 物件,以取得 IMarshal 介面的指標。 如果物件未實作 IMarshal,這表示它依賴 COM 來提供封送處理支援, CoMarshalInterface 會取得 COM 的預設 IMarshal實作指標。
- 使用已傳回哪一個IMarshal介面指標,呼叫IMarshal::GetUnmarshalClass,以取得物件的 Proxy CLSID。
- 將 Proxy 的 CLSID 寫入要用於封送處理的資料流程。
- 呼叫 IMarshal::MarshalInterface以封送處理介面指標。
如果您要實作現有的 COM 介面,或使用 Microsoft 介面定義語言 (MIDL) 來定義自己的介面,MIDL 產生的 Proxy 和存根會為您呼叫 CoMarshalInterface 。 如果您要撰寫自己的 Proxy 和存根,您的 Proxy 程式碼和存根程式碼應該都會呼叫 CoMarshalInterface ,以正確地封送處理介面指標。 不建議直接從 Proxy 和存根程式碼呼叫 IMarshal 。
如果您要撰寫自己的 IMarshal實作,而 Proxy 需要存取私用物件,您可以將該物件的介面指標包含在寫入資料流程的資料中。 在這種情況下,如果您想要在傳遞介面指標時使用 COM 的預設封送處理實作,您可以在 物件上呼叫 CoMarshalInterface 來執行此動作。
規格需求
最低支援的用戶端 | Windows 2000 專業版 [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows 2000 Server [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | combaseapi.h (包含 Objbase.h) |
程式庫 | Ole32.lib |
Dll | Ole32.dll |