Compartir a través de


Función CoUnmarshalInterface (combaseapi.h)

Inicializa un proxy recién creado mediante los datos escritos en la secuencia mediante una llamada anterior a la función CoMarshalInterface y devuelve un puntero de interfaz a ese proxy.

Sintaxis

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

Parámetros

[in] pStm

Puntero a la secuencia desde la que se va a desenlazar la interfaz.

[in] riid

Referencia al identificador de la interfaz que se va a desmarmar. Para IID_NULL, la interfaz devuelta es la definida por la secuencia, objref.iid.

[out] ppv

Dirección de la variable de puntero que recibe el puntero de interfaz solicitado en riid. Tras la devolución correcta, *ppv contiene el puntero de interfaz solicitado para la interfaz no desactivada.

Valor devuelto

Esta función puede devolver el valor devuelto estándar E_FAIL, los errores devueltos por CoCreateInstance y los valores siguientes.

Código devuelto Descripción
S_OK
El puntero de interfaz se desenlazó correctamente.
STG_E_INVALIDPOINTER
pStm es un puntero no válido.
CO_E_NOTINITIALIZED
No se llamó a la función CoInitialize o OleInitialize en el subproceso actual antes de llamar a esta función.
CO_E_OBJNOTCONNECTED
La aplicación de objeto se ha desconectado del sistema de comunicación remota (por ejemplo, como resultado de una llamada a la función CoDisconnectObject ).
REGDB_E_CLASSNOTREG
Error al leer la base de datos de registro.
E_NOINTERFACE
QueryInterface final de esta función para la interfaz solicitada devolvió E_NOINTERFACE.

Comentarios

Importante  

Nota de seguridad: Llamar a este método con datos que no son de confianza es un riesgo de seguridad. Llame a este método solo con datos de confianza.

 
La función CoUnmarshalInterface realiza las tareas siguientes:
  1. Lee de la secuencia el CLSID que se va a usar para crear una instancia del proxy.
  2. Obtiene un puntero IMarshal al proxy que va a realizar la desacoplación. Si el objeto usa la implementación de serialización predeterminada de COM, el puntero obtenido es para una instancia del objeto proxy genérico. Si la serialización se está produciendo entre dos subprocesos en el mismo proceso, el puntero es a una instancia del serializador de subprocesos sin subprocesos en proceso. Si el objeto proporciona su propio código de serialización, CoUnmarshalInterface llama a la función CoCreateInstance y pasa el CLSID que lee de la secuencia de serialización. CoCreateInstance crea una instancia del proxy del objeto y devuelve un puntero de interfaz IMarshal al proxy.
  3. Con cualquier puntero de interfaz IMarshal que haya adquirido, la función llama a IMarshal::UnmarshalInterface y, si procede, IMarshal::ReleaseMarshalData.
El autor de la llamada principal de esta función es COM, desde servidores proxy de interfaz o códigos auxiliares que desenlazan un puntero de interfaz. Sin embargo, hay algunas situaciones en las que podrías llamar a CoUnmarshalInterface. Por ejemplo, si va a implementar un código auxiliar, la implementación llamaría a CoUnmarshalInterface cuando el código auxiliar recibe un puntero de interfaz como parámetro en una llamada de método.

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

CoMarshalInterface

IMarshal::UnmarshalInterface