Поделиться через


Функция 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
Перед вызовом этой функции необходимо вызвать функцию CoInitialize или OleInitialize .

Комментарии

Эта функция выполняет следующие задачи:

  1. Запрашивает у объекта указатель IMarshal или, если объект не реализует IMarshal, получает указатель на стандартный маршалер COM.
  2. Используя указатель, полученный в предыдущем элементе, вызывает IMarshal::GetMarshalSizeMax.
  3. Добавляет к значению, возвращаемого вызовом GetMarshalSizeMax , размер заголовка данных маршалинга и, возможно, значения CLSID прокси-сервера, чтобы получить максимальный размер в байтах объема данных, записываемых в поток маршалинга.
Вы не вызываете эту функцию явным образом, если только вы не реализуете IMarshal. В этом случае заглушка маршалинга должна вызывать эту функцию, чтобы получить правильный размер пакета данных для маршалинга.

Значение, возвращаемое этим методом, гарантированно будет действительным только при условии, что внутреннее состояние маршалируемого объекта не изменится. Таким образом, фактическое маршалирование должно выполняться сразу после возвращения этой функции, иначе заглушка рискует, что объекту из-за некоторого изменения состояния может потребоваться больше памяти для маршалинга, чем было первоначально указано.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Профессиональная [классические приложения | Приложения UWP]
Минимальная версия сервера Windows 2000 Server [классические приложения | Приложения UWP]
Целевая платформа Windows
Header combaseapi.h (включая Objbase.h)
Библиотека Ole32.lib
DLL Ole32.dll

См. также раздел

CoMarshalInterface

IMarshal::GetMarshalSizeMax