CoGetStandardMarshal 函式 (combaseapi.h)
根據呼叫端,在客戶端進程或伺服器進程中建立預設或標準封送處理物件,並傳回該物件的 IMarshal 實作指標。
語法
HRESULT CoGetStandardMarshal(
[in] REFIID riid,
[in] LPUNKNOWN pUnk,
[in] DWORD dwDestContext,
[in, optional] LPVOID pvDestContext,
[in] DWORD mshlflags,
[out] LPMARSHAL *ppMarshal
);
參數
[in] riid
要封送處理其指標之介面標識符的參考。 此介面必須衍生自 IUnknown 介面。
[in] pUnk
要封送處理之介面的指標。
[in] dwDestContext
指定介面的目的地內容,其為未隔離。 值來自列舉 MSHCTX。 解除封存可能會發生在目前進程的另一個 Apartment 中 (MSHCTX_INPROC) ,或發生在與目前進程相同的電腦上另一個進程 (MSHCTX_LOCAL) 。
[in, optional] pvDestContext
此參數是保留的,而且必須是 NULL。
[in] mshlflags
指出要封送處理的數據是要傳輸回用戶端進程, (一般案例) 或寫入多個用戶端可擷取的全域數據表。 值來自 MSHLFLAGS 列舉。
[out] ppMarshal
接收標準封送處理器介面指標的 IMarshal* 指標變數位址。
傳回值
此函式可以傳回標準傳回值E_FAIL、E_OUTOFMEMORY和E_UNEXPECTED,以及下列值。
傳回碼 | 描述 |
---|---|
|
已成功傳回 IMarshal 實例。 |
|
必須先在目前線程上呼叫 CoInitialize 或 OleInitialize 函式,才能呼叫此函式。 |
備註
CoGetStandardMarshal 函式會在用戶端進程或伺服器進程中建立預設或標準封送處理對象,視需要傳回該物件的 IMarshal 指標給呼叫端。 如果您實作 IMarshal,您可能會希望實作呼叫 CoGetStandardMarshal 做為委派 COM 默認實作的方式,任何您不完全瞭解或想要處理的目的地內容。 否則,您可以忽略此函式,這是 COM 在其內部封送處理程式中呼叫的一部分。
當用戶端程式中的 COM 連結庫收到封送處理介面指標時,它會尋找要用於建立 Proxy 的 CLSID,以用於解除封包的解除封包。 如果封包不包含 Proxy 的 CLSID,COM 會呼叫 CoGetStandardMarshal,並傳遞 NULLpUnk 值。 此函式會在用戶端程式中建立標準 Proxy,並傳回該 Proxy 實作 IMarshal 的指標。 COM 會使用此指標來呼叫 CoUnmarshalInterface ,以擷取所要求介面的指標。
如果您的 OLE 伺服器應用程式的 IMarshal 實作呼叫 CoGetStandardMarshal,您應該同時傳遞 (riid) 的 IID,以及 (pUnk) 的指標,也就是要求的介面。
此函式會執行下列工作:
- 判斷 pUnk 是否為 NULL。
- 如果 pUnk 為 NULL,請在指定的 riid 用戶端程式中建立標準介面 Proxy,並傳回 Proxy 的 IMarshal 指標。
- 如果 pUnk 不是 NULL,會檢查物件是否已經存在封送處理器、視需要建立新的封送處理器,並傳回封送處理器的 IMarshal 指標。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 專業版 [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows 2000 Server [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | combaseapi.h (包含 Objbase.h) |
程式庫 | Ole32.lib |
Dll | Ole32.dll |