Condividi tramite


Funzione CoDisconnectObject (combaseapi.h)

Disconnette tutte le connessioni di processo remoto gestite per conto di tutti i puntatori di interfaccia che puntano a un oggetto specificato.

Solo il processo che gestisce effettivamente l'oggetto deve chiamare CoDisconnectObject.

Sintassi

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

Parametri

[in] pUnk

Puntatore a qualsiasi interfaccia derivata da IUnknown sull'oggetto da disconnettere.

[in] dwReserved

Questo parametro è riservato e deve essere 0.

Valore restituito

Questa funzione restituisce S_OK per indicare che tutte le connessioni ai processi remoti sono state eliminate correttamente.

Commenti

La funzione CoDisconnectObject consente a un server di disconnettere correttamente tutti i client esterni all'oggetto specificato da pUnk.

Esegue le attività seguenti:

  1. Verifica se l'oggetto da disconnettere implementa l'interfaccia IMarshal . In tal caso, ottiene il puntatore a tale interfaccia; in caso contrario, ottiene un puntatore all'implementazione IMarshal del gestore di marshalling standard (ad esempio COM).
  2. Usando il puntatore all'interfaccia IMarshal acquisito, la funzione chiama quindi IMarshal::D isconnectObject per disconnettere tutti i client out-of-process.
Il client di un oggetto non chiama CoDisconnectObject per disconnettersi dal server (i client devono usare IUnknown::Release a questo scopo). Un server OLE chiama invece CoDisconnectObject per disconnettere forzatamente i client di un oggetto, in genere in risposta a un utente che chiude l'applicazione server.

Analogamente, un contenitore OLE che supporta collegamenti esterni ai relativi oggetti incorporati può chiamare CoDisconnectObject per eliminare tali collegamenti. Anche in questo caso, questa chiamata viene in genere eseguita in risposta a un utente che chiude l'applicazione. Il contenitore deve prima chiamare IOleObject::Close per tutti gli oggetti OLE, ognuno dei quali deve inviare notifiche IAdviseSink::OnClose ai vari client. Il contenitore può quindi chiamare CoDisconnectObject per chiudere tutte le connessioni esistenti.

CoDisconnectObject non disconnette necessariamente i client out-of-process immediatamente. Se eventuali chiamate di marshalling sono in sospeso nell'oggetto server, CoDisconnectObject disconnette l'oggetto solo quando tali chiamate sono state restituite. Nel frattempo , CoDisconnectObject imposta un flag che causa la restituzione di CO_E_OBJNOTCONNECTED di nuove chiamate di marshalling.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [app desktop | App UWP]
Server minimo supportato Windows 2000 Server [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione combaseapi.h (include Objbase.h)
Libreria Ole32.lib
DLL Ole32.dll

Vedi anche

IAdviseSink::OnClose

IMarshal::D isconnectObject

IOleObject::Close