CoDisconnectObject, fonction (combaseapi.h)

Déconnecte toutes les connexions de processus distants gérées pour le compte de tous les pointeurs d’interface qui pointent vers un objet spécifié.

Seul le processus qui gère réellement l’objet doit appeler CoDisconnectObject.

Syntaxe

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

Paramètres

[in] pUnk

Pointeur vers toute interface dérivée de IUnknown sur l’objet à déconnecter.

[in] dwReserved

Ce paramètre est réservé et doit être 0.

Valeur retournée

Cette fonction retourne S_OK pour indiquer que toutes les connexions aux processus distants ont été correctement supprimées.

Remarques

La fonction CoDisconnectObject permet à un serveur de déconnecter correctement tous les clients externes de l’objet spécifié par pUnk.

Il effectue les tâches suivantes :

  1. Vérifie si l’objet à déconnecter implémente l’interface IMarshal . Si c’est le cas, il obtient le pointeur vers cette interface ; Si ce n’est pas le cas, il obtient un pointeur vers l’implémentation IMarshal du marshaleur standard (c’est-à-dire, com).
  2. À l’aide du pointeur d’interface IMarshal qu’elle a acquis, la fonction appelle ensuite IMarshal ::D isconnectObject pour déconnecter tous les clients hors processus.
Le client d’un objet n’appelle pas CoDisconnectObject pour se déconnecter du serveur (les clients doivent utiliser IUnknown ::Release à cet effet). Au lieu de cela, un serveur OLE appelle CoDisconnectObject pour déconnecter de force les clients d’un objet, généralement en réponse à la fermeture de l’application serveur par un utilisateur.

De même, un conteneur OLE qui prend en charge les liens externes vers ses objets incorporés peut appeler CoDisconnectObject pour détruire ces liens. Là encore, cet appel est normalement effectué en réponse à la fermeture de l’application par un utilisateur. Le conteneur doit d’abord appeler IOleObject ::Close pour tous ses objets OLE, chacun devant envoyer des notifications IAdviseSink ::OnClose à ses différents clients. Le conteneur peut ensuite appeler CoDisconnectObject pour fermer toutes les connexions existantes.

CoDisconnectObject ne déconnecte pas nécessairement les clients hors processus immédiatement. Si des appels marshalés sont en attente sur l’objet serveur, CoDisconnectObject déconnecte l’objet uniquement lorsque ces appels sont retournés. En attendant, CoDisconnectObject définit un indicateur qui provoque le retour de tous les nouveaux appels marshalés CO_E_OBJNOTCONNECTED.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau | Applications UWP]
Plateforme cible Windows
En-tête combaseapi.h (inclure Objbase.h)
Bibliothèque Ole32.lib
DLL Ole32.dll

Voir aussi

IAdviseSink ::OnClose

IMarshal ::D isconnectObject

IOleObject ::Close