共用方式為


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傳回的資料流程存取錯誤值,以及下列值。

傳回碼 描述
S_OK
已成功封送處理 HRESULT
CO_E_NOTINITIALIZED
呼叫此函式之前,目前線程上未呼叫 CoInitializeOleInitialize 函式。

備註

CoMarshalInterface函式會將iUnknown 實作指向 pUnknown實作的物件上 riid 所參考的介面封送處理。 若要這樣做, CoMarshalInterface 函式會執行下列工作:

  1. 查詢 物件,以取得 IMarshal 介面的指標。 如果物件未實作 IMarshal,這表示它依賴 COM 來提供封送處理支援, CoMarshalInterface 會取得 COM 的預設 IMarshal實作指標。
  2. 使用已傳回哪一個IMarshal介面指標,呼叫IMarshal::GetUnmarshalClass,以取得物件的 Proxy CLSID。
  3. 將 Proxy 的 CLSID 寫入要用於封送處理的資料流程。
  4. 呼叫 IMarshal::MarshalInterface以封送處理介面指標。
用戶端進程中的 COM 程式庫會呼叫 CoUnmarshalInterface 函式來擷取資料並初始化 Proxy。 呼叫 CoUnmarshalInterface之前,請回到資料流程中的原始位置。

如果您要實作現有的 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

另請參閱

CoUnmarshalInterface

IMarshal::MarshalInterface