Функция CoMarshalInterface (combaseapi.h)
Записывает в поток данные, необходимые для инициализации прокси-объекта в некотором клиентском процессе.
Синтаксис
HRESULT CoMarshalInterface(
[in] LPSTREAM pStm,
[in] REFIID riid,
[in] LPUNKNOWN pUnk,
[in] DWORD dwDestContext,
[in, optional] LPVOID pvDestContext,
[in] DWORD mshlflags
);
Параметры
[in] pStm
Указатель на поток, используемый во время маршалинга. См. раздел IStream.
[in] riid
Ссылка на идентификатор маршалированного интерфейса. Этот интерфейс должен быть производным от интерфейса IUnknown .
[in] pUnk
Указатель на интерфейс для маршалинга. Этот интерфейс должен быть производным от интерфейса IUnknown .
[in] dwDestContext
Контекст назначения, в котором требуется отменить удаление указанного интерфейса. Возможные значения поступают из перечисления MSHCTX. В настоящее время размежевание может происходить в другом объекте текущего процесса (MSHCTX_INPROC), в другом процессе на том же компьютере, что и текущий процесс (MSHCTX_LOCAL), или в процессе на другом компьютере (MSHCTX_DIFFERENTMACHINE).
[in, optional] pvDestContext
Этот параметр зарезервирован и должен иметь значение NULL.
[in] mshlflags
Флаги, указывающие, должны ли данные для маршалинга передаваться обратно в клиентский процесс (типичный случай) или записываться в глобальную таблицу, где их могут извлечь несколько клиентов. Возможные значения поступают из перечисления MSHLFLAGS .
Возвращаемое значение
Эта функция может возвращать стандартные возвращаемые значения E_FAIL, E_OUTOFMEMORY и E_UNEXPECTED, значения ошибок потокового доступа, возвращаемые IStream, а также следующие значения.
Код возврата | Описание |
---|---|
|
HRESULT успешно маршалирован. |
|
Функция CoInitialize или OleInitialize не была вызвана в текущем потоке до вызова этой функции. |
Комментарии
Функция CoMarshalInterface маршалирует интерфейс, на который ссылается riid, в объекте, на реализацию IUnknown которого указывает pUnk. Для этого функция CoMarshalInterface выполняет следующие задачи:
- Запрашивает у объекта указатель на интерфейс IMarshal . Если объект не реализует IMarshal, а это означает, что он использует COM для обеспечения поддержки маршалинга, CoMarshalInterface получает указатель на реализацию COM по умолчанию IMarshal.
- Получает CLSID прокси-сервера объекта путем вызова метода IMarshal::GetUnmarshalClass, используя любой указатель интерфейса IMarshal , который был возвращен.
- Записывает CLSID прокси-сервера в поток, используемый для маршалинга.
- Маршалирует указатель интерфейса, вызывая IMarshal::MarshalInterface.
Если вы реализуете существующие COM-интерфейсы или определяете собственные интерфейсы с помощью языка MIDL, созданные midl прокси-серверы и заглушки вызывают CoMarshalInterface . Если вы пишете собственные прокси-серверы и заглушки, код прокси-сервера и код заглушки должны вызывать CoMarshalInterface , чтобы правильно маршалировать указатели интерфейса. Не рекомендуется вызывать IMarshal непосредственно из прокси-сервера и кода заглушки.
Если вы пишете собственную реализацию IMarshal, а прокси-серверу требуется доступ к частному объекту, можно включить указатель интерфейса на этот объект в составе данных, записываемых в поток. В таких ситуациях, если вы хотите использовать реализацию маршалинга COM по умолчанию при передаче указателя интерфейса, для этого можно вызвать CoMarshalInterface в объекте .
Требования
Минимальная версия клиента | Windows 2000 Профессиональная [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows 2000 Server [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | combaseapi.h (включая Objbase.h) |
Библиотека | Ole32.lib |
DLL | Ole32.dll |