Función CoMarshalInterface (combaseapi.h)

Escribe en un flujo los datos necesarios para inicializar un objeto proxy en algún proceso de cliente.

Sintaxis

HRESULT CoMarshalInterface(
  [in]           LPSTREAM  pStm,
  [in]           REFIID    riid,
  [in]           LPUNKNOWN pUnk,
  [in]           DWORD     dwDestContext,
  [in, optional] LPVOID    pvDestContext,
  [in]           DWORD     mshlflags
);

Parámetros

[in] pStm

Puntero a la secuencia que se va a usar durante la serialización. Mira IStream.

[in] riid

Referencia al identificador de la interfaz que se va a serializar. Esta interfaz debe derivarse de la interfaz IUnknown .

[in] pUnk

Puntero a la interfaz que se va a serializar. Esta interfaz debe derivarse de la interfaz IUnknown .

[in] dwDestContext

Contexto de destino donde se va a desmarcar la interfaz especificada. Los valores posibles proceden de la enumeración MSHCTX. Actualmente, la desmarshaling puede producirse en otro apartamento del proceso actual (MSHCTX_INPROC), en otro proceso en el mismo equipo que el proceso actual (MSHCTX_LOCAL) o en un proceso en otro equipo (MSHCTX_DIFFERENTMACHINE).

[in, optional] pvDestContext

Este parámetro está reservado y debe ser NULL.

[in] mshlflags

Las marcas que especifican si los datos que se van a serializar se devolverán al proceso de cliente (el caso típico) o se escribirán en una tabla global, donde varios clientes pueden recuperarlos. Los valores posibles proceden de la enumeración MSHLFLAGS .

Valor devuelto

Esta función puede devolver los valores devueltos estándar E_FAIL, E_OUTOFMEMORY y E_UNEXPECTED, los valores de error de acceso a secuencias devueltos por IStream, así como los siguientes valores.

Código devuelto Descripción
S_OK
HrESULT se serializó correctamente.
CO_E_NOTINITIALIZED
No se llamó a la función CoInitialize o OleInitialize en el subproceso actual antes de llamar a esta función.

Comentarios

La función CoMarshalInterface serializa la interfaz a la que hace referencia riid en el objeto cuya implementación IUnknown apunta a pUnk. Para ello, la función CoMarshalInterface realiza las siguientes tareas:

  1. Consulta el objeto de un puntero a la interfaz IMarshal . Si el objeto no implementa IMarshal, lo que significa que se basa en COM para proporcionar compatibilidad con la serialización, CoMarshalInterface obtiene un puntero a la implementación predeterminada de COM de IMarshal.
  2. Obtiene el CLSID del proxy del objeto llamando a IMarshal::GetUnmarshalClass, utilizando el puntero de interfaz IMarshal que se haya devuelto.
  3. Escribe el CLSID del proxy en la secuencia que se va a usar para serializar.
  4. Serializa el puntero de interfaz llamando a IMarshal::MarshalInterface.
La biblioteca COM del proceso de cliente llama a la función CoUnmarshalInterface para extraer los datos e inicializar el proxy. Antes de llamar a CoUnmarshalInterface, vuelva a la posición original de la secuencia.

Si va a implementar interfaces COM existentes o definir sus propias interfaces mediante el Lenguaje de definición de interfaz de Microsoft (MIDL), los proxies y códigos auxiliares generados por MIDL llaman a CoMarshalInterface automáticamente. Si va a escribir sus propios proxies y códigos auxiliares, el código proxy y el código auxiliar deben llamar a CoMarshalInterface para serializar correctamente los punteros de interfaz. No se recomienda llamar a IMarshal directamente desde el proxy y el código auxiliar.

Si está escribiendo su propia implementación de IMarshal y el proxy necesita acceso a un objeto privado, puede incluir un puntero de interfaz a ese objeto como parte de los datos que escribe en la secuencia. En tales situaciones, si desea usar la implementación de serialización predeterminada de COM al pasar el puntero de interfaz, puede llamar a CoMarshalInterface en el objeto para hacerlo.

Requisitos

   
Cliente mínimo compatible Windows 2000 Professional [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible Windows 2000 Server [aplicaciones de escritorio | Aplicaciones para UWP]
Plataforma de destino Windows
Encabezado combaseapi.h (incluya Objbase.h)
Library Ole32.lib
Archivo DLL Ole32.dll

Consulte también

CoUnmarshalInterface

IMarshal::MarshalInterface