Compartilhar via


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