共用方式為


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,以及下列值。

傳回碼 描述
S_OK
已成功傳回 IMarshal 實例。
CO_E_NOTINITIALIZED
必須先在目前線程上呼叫 CoInitializeOleInitialize 函式,才能呼叫此函式。

備註

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) 的指標,也就是要求的介面。

此函式會執行下列工作:

  1. 判斷 pUnk 是否為 NULL
  2. 如果 pUnkNULL,請在指定的 riid 用戶端程式中建立標準介面 Proxy,並傳回 Proxy 的 IMarshal 指標。
  3. 如果 pUnk 不是 NULL,會檢查物件是否已經存在封送處理器、視需要建立新的封送處理器,並傳回封送處理器的 IMarshal 指標。

規格需求

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

另請參閱

IMarshal