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


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

Комментарии

Функция CoGetStandardMarshal создает стандартный или стандартный объект маршалинга в клиентском или серверном процессе, если это может потребоваться, и возвращает указатель IMarshal этого объекта на вызывающий объект. Если вы реализуете IMarshal, может потребоваться, чтобы ваша реализация вызывала CoGetStandardMarshal для делегирования реализации по умолчанию COM любых контекстов назначения, которые вы не полностью понимаете или хотите обрабатывать. В противном случае эту функцию можно игнорировать, которую COM вызывает в рамках внутренних процедур маршалинга.

Когда библиотека COM в клиентском процессе получает указатель маршалированного интерфейса, она ищет идентификатор CLSID, который будет использоваться при создании прокси-сервера для размежевывания пакета. Если пакет не содержит ИДЕНТИФИКАТОР CLSID для прокси-сервера, COM вызывает CoGetStandardMarshal, передавая значение PUnk NULL. Эта функция создает стандартный прокси-сервер в клиентском процессе и возвращает указатель на реализацию IMarshal этого прокси-сервера. COM использует этот указатель для вызова CoUnmarshalInterface для получения указателя на запрошенный интерфейс.

Если реализация IMarshal в приложении сервера OLE вызывает CoGetStandardMarshal, необходимо передать как IID (riid), так и указатель на (pUnk), запрашиваемый интерфейс.

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

  1. Определяет, имеет ли pUnk значение NULL.
  2. Если pUnk имеет значение NULL, создает стандартный прокси-сервер интерфейса в клиентском процессе для указанного riid и возвращает указатель IMarshal прокси-сервера.
  3. Если pUnk не имеет значение NULL, проверяет, существует ли маршалер для объекта, при необходимости создает новый и возвращает указатель IMarshal .

Требования

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

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

IMarshal