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


Функция CoUnmarshalInterface (combaseapi.h)

Инициализирует созданный прокси-сервер, используя данные, записанные в поток предыдущим вызовом функции CoMarshalInterface , и возвращает указатель интерфейса на этот прокси-сервер.

Синтаксис

HRESULT CoUnmarshalInterface(
  [in]  LPSTREAM pStm,
  [in]  REFIID   riid,
  [out] LPVOID   *ppv
);

Параметры

[in] pStm

Указатель на поток, из которого должен быть удален интерфейс.

[in] riid

Ссылка на идентификатор интерфейса для отмены маршалинга. Для IID_NULL возвращенным интерфейсом является интерфейс, определенный потоком objref.iid.

[out] ppv

Адрес переменной указателя, получающей указатель интерфейса, запрошенный в riid. После успешного возврата *ppv содержит запрошенный указатель интерфейса для немаршалированного интерфейса.

Возвращаемое значение

Эта функция может возвращать стандартное возвращаемое значение E_FAIL, ошибки, возвращаемые CoCreateInstance, и следующие значения.

Код возврата Описание
S_OK
Указатель интерфейса был успешно удален.
STG_E_INVALIDPOINTER
pStm является недопустимым указателем.
CO_E_NOTINITIALIZED
Функция CoInitialize или OleInitialize не была вызвана в текущем потоке до вызова этой функции.
CO_E_OBJNOTCONNECTED
Приложение объекта было отключено от системы удаленного взаимодействия (например, в результате вызова функции CoDisconnectObject ).
REGDB_E_CLASSNOTREG
Произошла ошибка при чтении базы данных регистрации.
E_NOINTERFACE
Окончательный объект QueryInterface этой функции для запрошенного интерфейса вернулся E_NOINTERFACE.

Комментарии

Важно  

Примечание по безопасности. Вызов этого метода с недоверенными данными представляет угрозу безопасности. Вызывайте этот метод только для надежных данных.

 
Функция CoUnmarshalInterface выполняет следующие задачи:
  1. Считывает из потока идентификатор CLSID, используемый для создания экземпляра прокси-сервера.
  2. Возвращает указатель IMarshal на прокси-сервер, который выполняет распаковку. Если объект использует реализацию маршалинга com по умолчанию, полученный таким образом указатель будет на экземпляр универсального прокси-объекта. Если маршалинг выполняется между двумя потоками в одном процессе, указателем является экземпляр внутрипроцессного свободнопотокового маршалера. Если объект предоставляет собственный код маршалинга, CoUnmarshalInterface вызывает функцию CoCreateInstance , передавая ИДЕНТИФИКАТОР CLSID, который он считывает из потока маршалинга. CoCreateInstance создает экземпляр прокси-сервера объекта и возвращает указатель интерфейса IMarshal на прокси-сервер.
  3. Используя любой полученный указатель интерфейса IMarshal, функция вызывает IMarshal::UnmarshalInterface и, при необходимости, IMarshal::ReleaseMarshalData.
Основной вызывающий объект этой функции — com, из прокси-серверов или заглушок интерфейса, которые отменяют марширование указателя интерфейса. Однако в некоторых ситуациях можно вызвать CoUnmarshalInterface. Например, если вы реализуете заглушку, реализация вызовет CoUnmarshalInterface , когда заглушка получает указатель интерфейса в качестве параметра в вызове метода.

Требования

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

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

CoMarshalInterface

IMarshal::UnmarshalInterface