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 返回的值加上封送处理数据标头的大小以及代理 CLSID 的大小,以获取要写入封送处理流的数据量的最大大小(以字节为单位)。
除非要实现 IMarshal,否则不会显式调用此函数,在这种情况下,封送处理存根应调用此函数,以获取要封送的数据包的正确大小。

只要要封送的对象的内部状态不更改,此方法返回的值才保证有效。 因此,应在此函数返回后立即执行实际的封送处理,否则存根存在对象由于状态发生某些更改而可能需要比最初指示更多的内存进行封送处理的风险。

要求

要求
最低受支持的客户端 Windows 2000 专业版 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows 2000 Server [桌面应用 |UWP 应用]
目标平台 Windows
标头 combaseapi.h (包括 Objbase.h)
Library Ole32.lib
DLL Ole32.dll

另请参阅

CoMarshalInterface

IMarshal::GetMarshalSizeMax