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 |
---|---|
|
HrESULT se serializó correctamente. |
|
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:
- 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.
- Obtiene el CLSID del proxy del objeto llamando a IMarshal::GetUnmarshalClass, utilizando el puntero de interfaz IMarshal que se haya devuelto.
- Escribe el CLSID del proxy en la secuencia que se va a usar para serializar.
- Serializa el puntero de interfaz llamando a IMarshal::MarshalInterface.
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 |