Compartir a través de


Función CoDisconnectObject (combaseapi.h)

Desconecta todas las conexiones de procesos remotos que se mantienen en nombre de todos los punteros de interfaz que apuntan a un objeto especificado.

Solo el proceso que administra realmente el objeto debe llamar a CoDisconnectObject.

Sintaxis

HRESULT CoDisconnectObject(
  [in] LPUNKNOWN pUnk,
  [in] DWORD     dwReserved
);

Parámetros

[in] pUnk

Puntero a cualquier interfaz derivada de IUnknown en el objeto que se va a desconectar.

[in] dwReserved

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

Valor devuelto

Esta función devuelve S_OK para indicar que todas las conexiones a procesos remotos se eliminaron correctamente.

Comentarios

La función CoDisconnectObject permite que un servidor desconecte correctamente todos los clientes externos al objeto especificado por pUnk.

Realiza las siguientes tareas:

  1. Comprueba si el objeto que se va a desconectar implementa la interfaz IMarshal . Si es así, obtiene el puntero a esa interfaz; Si no es así, obtiene un puntero a la implementación de IMarshal del serializador estándar (es decir, COM).
  2. Con el puntero de interfaz IMarshal que haya adquirido, la función llama a IMarshal::D isconnectObject para desconectar todos los clientes fuera de proceso.
El cliente de un objeto no llama a CoDisconnectObject para desconectarse del servidor (los clientes deben usar IUnknown::Release para este fin). En su lugar, un servidor OLE llama a CoDisconnectObject para desconectar forzosamente los clientes de un objeto, normalmente en respuesta a que un usuario cierre la aplicación de servidor.

Del mismo modo, un contenedor OLE que admite vínculos externos a sus objetos incrustados puede llamar a CoDisconnectObject para destruir esos vínculos. De nuevo, esta llamada se realiza normalmente en respuesta a un usuario que cierra la aplicación. El contenedor debe llamar primero a IOleObject::Close para todos sus objetos OLE, cada uno de los cuales debe enviar notificaciones IAdviseSink::OnClose a sus distintos clientes. A continuación, el contenedor puede llamar a CoDisconnectObject para cerrar las conexiones existentes.

CoDisconnectObject no necesariamente desconecta los clientes fuera de proceso inmediatamente. Si hay llamadas serialadas pendientes en el objeto de servidor, CoDisconnectObject desconecta el objeto solo cuando se han devuelto esas llamadas. Mientras tanto, CoDisconnectObject establece una marca que hace que las nuevas llamadas serialadas devuelvan CO_E_OBJNOTCONNECTED.

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

IAdviseSink::OnClose

IMarshal::D isconnectObject

IOleObject::Close