Função CoDisconnectObject (combaseapi.h)

Desconecta todas as conexões de processo remoto que estão sendo mantidas em nome de todos os ponteiros de interface que apontam para um objeto especificado.

Somente o processo que realmente gerencia o objeto deve chamar CoDisconnectObject.

Sintaxe

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

Parâmetros

[in] pUnk

Um ponteiro para qualquer interface derivada de IUnknown no objeto a ser desconectado.

[in] dwReserved

Esse parâmetro é reservado e deve ser 0.

Retornar valor

Essa função retorna S_OK para indicar que todas as conexões com processos remotos foram excluídas com êxito.

Comentários

A função CoDisconnectObject permite que um servidor desconecte corretamente todos os clientes externos para o objeto especificado por pUnk.

Ele executa as seguintes tarefas:

  1. Verifica se o objeto a ser desconectado implementa a interface IMarshal . Nesse caso, ele obtém o ponteiro para essa interface; caso contrário, ele obtém um ponteiro para a implementação IMarshal do marshaler padrão (ou seja, COM).
  2. Usando o ponteiro da interface IMarshal adquirido, a função chama IMarshal::D isconnectObject para desconectar todos os clientes fora do processo.
O cliente de um objeto não chama CoDisconnectObject para se desconectar do servidor (os clientes devem usar IUnknown::Release para essa finalidade). Em vez disso, um servidor OLE chama CoDisconnectObject para desconectar à força os clientes de um objeto, geralmente em resposta a um usuário fechando o aplicativo de servidor.

Da mesma forma, um contêiner OLE que dá suporte a links externos para seus objetos inseridos pode chamar CoDisconnectObject para destruir esses links. Novamente, essa chamada normalmente é feita em resposta a um usuário fechando o aplicativo. O contêiner deve primeiro chamar IOleObject::Close para todos os seus objetos OLE, cada um dos quais deve enviar notificações IAdviseSink::OnClose para seus vários clientes. Em seguida, o contêiner pode chamar CoDisconnectObject para fechar quaisquer conexões existentes.

CoDisconnectObject não desconecta necessariamente clientes fora do processo imediatamente. Se alguma chamada marshalada estiver pendente no objeto do servidor, CoDisconnectObject desconectará o objeto somente quando essas chamadas forem retornadas. Enquanto isso, CoDisconnectObject define um sinalizador que faz com que novas chamadas marshaladas retornem CO_E_OBJNOTCONNECTED.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows 2000 Server [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho combaseapi.h (inclua Objbase.h)
Biblioteca Ole32.lib
DLL Ole32.dll

Confira também

IAdviseSink::OnClose

IMarshal::D isconnectObject

IOleObject::Close