Función CoReleaseMarshalData (combaseapi.h)

Destruye un paquete de datos serializado previamente.

Sintaxis

HRESULT CoReleaseMarshalData(
  [in] LPSTREAM pStm
);

Parámetros

[in] pStm

Puntero a la secuencia que contiene el paquete de datos que se va a destruir. Vea IStream.

Valor devuelto

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

Código devuelto Descripción
S_OK
El paquete de datos se destruyó correctamente.
STG_E_INVALIDPOINTER
Error relacionado con el parámetro pStm .
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

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 CoReleaseMarshalData realiza las siguientes tareas:
  1. La función lee un CLSID de la secuencia.
  2. Si se usa la implementación de serialización predeterminada de COM, la función obtiene un puntero IMarshal a una instancia del desmarshaler estándar. Si se usa la serialización personalizada, la función crea un proxy mediante una llamada a la función CoCreateInstance , pasando el CLSID que lee de la secuencia y solicita un puntero de interfaz IMarshal al proxy recién creado.
  3. Con el puntero de interfaz IMarshal que haya adquirido, la función llama a IMarshal::ReleaseMarshalData.
Normalmente, no se llama a esta función. La única situación en la que es posible que tenga que llamar a esta función es si usa serialización personalizada (escriba y use su propia implementación de IMarshal). Entre los ejemplos de cuándo se debe llamar a CoReleaseMarshalData se incluyen las siguientes situaciones:
  • Se intentó desenlamar el paquete de datos, pero se produjo un error.
  • Se quitó un paquete de datos serializado de una tabla global.
Como analogía, el paquete de datos se puede considerar como una referencia al objeto original, como si fuera otro puntero de interfaz que se mantiene en el objeto. Al igual que un puntero de interfaz real, ese paquete de datos debe liberarse en algún momento. El uso de IMarshal::ReleaseMarshalData para liberar paquetes de datos es análogo al uso de IUnknown::Release para liberar punteros de interfaz.

Tenga en cuenta que no es necesario llamar a CoReleaseMarshalData después de una llamada correcta de la función CoUnmarshalInterface ; esa función libera los datos de serialización como parte del procesamiento que realiza.

Importante Debe llamar a la función CoReleaseMarshalData en el mismo apartamento que llamó a CoMarshalInterface para serializar el objeto en la secuencia. Si no se hace esto, es posible que se filtre la referencia de objeto que mantiene el paquete serializado en la secuencia.
 

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::ReleaseMarshalData