共用方式為


CoGetMarshalSizeMax 函式 (combaseapi.h)

傳回將指定介面指標封送處理至指定物件所需的位元組數目上限。

語法

HRESULT CoGetMarshalSizeMax(
  [out]          ULONG     *pulSize,
  [in]           REFIID    riid,
  [in]           LPUNKNOWN pUnk,
  [in]           DWORD     dwDestContext,
  [in, optional] LPVOID    pvDestContext,
  [in]           DWORD     mshlflags
);

參數

[out] pulSize

要寫入封送處理數據流之數據封包大小上限值的指標,以位元組為單位。 如果此參數為 0,封包的大小為未知。

[in] riid

要封送處理其指標之介面標識符的參考。 此介面必須衍生自 IUnknown 介面。

[in] pUnk

要封送處理之介面的指標。 此介面必須衍生自 IUnknown 介面。

[in] dwDestContext

指定介面的目的地內容,其為未隔離。 dwDestContext 的值來自列舉 MSHCTX

[in, optional] pvDestContext

此參數是保留的,而且必須是 NULL

[in] mshlflags

指出要封送處理的數據是要傳輸回用戶端處理一般案例,還是寫入全域數據表,以便由多個用戶端擷取。 值來自列舉 MSHLFLAGS

傳回值

此函式可以傳回標準傳回值E_UNEXPECTED,以及下列值。

傳回碼 描述
S_OK
已成功傳回上限。
CO_E_NOTINITIALIZED
必須先呼叫 CoInitializeOleInitialize 函式,才能呼叫此函式。

備註

此函式會執行下列工作:

  1. 查詢 IMarshal 指標的物件,如果物件未實作 IMarshal,則會取得 COM 標準封送處理器的指標。
  2. 使用在上述專案中取得的指標,呼叫 IMarshal::GetMarshalSizeMax
  3. 將 加入 GetMarshalSizeMax 呼叫所傳回的值,封送處理數據標頭的大小,而且可能是 Proxy CLSID 的大小,以位元組為單位取得要寫入封送處理數據流的數據量上限。
除非您正在實作 IMarshal,否則不會明確呼叫此函式,在此情況下,封送處理存根應該呼叫此函式,以取得要封送處理的數據封包正確大小。

只要封送處理的對象內部狀態不會變更,這個方法所傳回的值才保證有效。 因此,在傳回此函式之後,應該立即完成實際的封送處理,或者存根會因為狀態變更而執行對象的風險,可能需要比原本指出更多的記憶體進行封送處理。

規格需求

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

另請參閱

CoMarshalInterface

IMarshal::GetMarshalSizeMax