Función CoGetStandardMarshal (combaseapi.h)

Crea un objeto de serialización predeterminado o estándar en el proceso de cliente o en el proceso del servidor, según el autor de la llamada, y devuelve un puntero a la implementación de IMarshal de ese objeto.

Sintaxis

HRESULT CoGetStandardMarshal(
  [in]           REFIID    riid,
  [in]           LPUNKNOWN pUnk,
  [in]           DWORD     dwDestContext,
  [in, optional] LPVOID    pvDestContext,
  [in]           DWORD     mshlflags,
  [out]          LPMARSHAL *ppMarshal
);

Parámetros

[in] riid

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

[in] pUnk

Puntero a la interfaz que se va a serializar.

[in] dwDestContext

Contexto de destino donde se va a desmarcar la interfaz especificada. Los valores proceden de la enumeración MSHCTX. La anulación de la serialización puede producirse en otro apartamento del proceso actual (MSHCTX_INPROC) o en otro proceso que se encuentra en el mismo equipo que el proceso actual (MSHCTX_LOCAL).

[in, optional] pvDestContext

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

[in] mshlflags

Indica si los datos que se van a serializar se van a devolver al proceso de cliente (el caso normal) o se escriben en una tabla global donde varios clientes pueden recuperarlos. Los valores proceden de la enumeración MSHLFLAGS .

[out] ppMarshal

Dirección de la variable de puntero IMarshal* que recibe el puntero de interfaz al serializador estándar.

Valor devuelto

Esta función puede devolver los valores devueltos estándar E_FAIL, E_OUTOFMEMORY y E_UNEXPECTED, así como los siguientes valores.

Código devuelto Descripción
S_OK
La instancia de IMarshal se devolvió correctamente.
CO_E_NOTINITIALIZED
Para poder llamar a esta función, se debe llamar a la función CoInitialize o OleInitialize en el subproceso actual.

Comentarios

La función CoGetStandardMarshal crea un objeto de serialización predeterminado o estándar en el proceso de cliente o en el proceso de servidor, según sea necesario, y devuelve el puntero IMarshal del objeto al autor de la llamada. Si implementa IMarshal, es posible que quiera que la implementación llame a CoGetStandardMarshal como una manera de delegar en la implementación predeterminada de COM los contextos de destino que no comprenda ni quiera controlar. De lo contrario, puede omitir esta función, que llama COM como parte de sus procedimientos de serialización internos.

Cuando la biblioteca COM del proceso de cliente recibe un puntero de interfaz serializado, busca que se use un CLSID para crear un proxy con el fin de desacoplar el paquete. Si el paquete no contiene un CLSID para el proxy, COM llama a CoGetStandardMarshal, pasando un valor pUnkNULL. Esta función crea un proxy estándar en el proceso de cliente y devuelve un puntero a la implementación del proxy de IMarshal. COM usa este puntero para llamar a CoUnmarshalInterface para recuperar el puntero a la interfaz solicitada.

Si la implementación de la aplicación de servidor OLE de IMarshal llama a CoGetStandardMarshal, debe pasar el IID de (riid) y un puntero a (pUnk), la interfaz que se solicita.

Esta función realiza las siguientes tareas:

  1. Determina si pUnk es NULL.
  2. Si pUnk es NULL, crea un proxy de interfaz estándar en el proceso de cliente para el riid especificado y devuelve el puntero IMarshal del proxy.
  3. Si pUnk no es NULL, comprueba si ya existe un serializador para el objeto, crea uno nuevo si es necesario y devuelve el puntero IMarshal del serializador.

Requisitos

Requisito Value
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

IMarshal