Freigeben über


CoDisconnectObject-Funktion (combaseapi.h)

Trennt alle Remoteprozessverbindungen, die im Namen aller Schnittstellenzeiger verwaltet werden, die auf ein angegebenes Objekt verweisen.

Nur der Prozess, der das Objekt tatsächlich verwaltet, sollte CoDisconnectObject aufrufen.

Syntax

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

Parameter

[in] pUnk

Ein Zeiger auf eine beliebige Schnittstelle, die von IUnknown für das objekt abgeleitet wird, das getrennt werden soll.

[in] dwReserved

Dieser Parameter ist reserviert und muss 0 sein.

Rückgabewert

Diese Funktion gibt S_OK zurück, um anzugeben, dass alle Verbindungen mit Remoteprozessen erfolgreich gelöscht wurden.

Hinweise

Die CoDisconnectObject-Funktion ermöglicht es einem Server, alle externen Clients ordnungsgemäß mit dem von pUnk angegebenen Objekt zu trennen.

Er führt die folgenden Aufgaben aus:

  1. Überprüft, ob das zu trennende Objekt die IMarshal-Schnittstelle implementiert. Wenn ja, wird der Zeiger auf diese Schnittstelle abgerufen. Wenn dies nicht der Fall ist, wird ein Zeiger auf die IMarshal-Implementierung des Standardmarshallers (d. h. com's) abgerufen.
  2. Mit dem IMarshal-Schnittstellenzeiger , den sie abgerufen hat, ruft die Funktion dann IMarshal::D isconnectObject auf, um alle Out-of-Process-Clients zu trennen.
Der Client eines Objekts ruft CoDisconnectObject nicht auf, um sich vom Server zu trennen (Clients sollten zu diesem Zweck IUnknown::Release verwenden). Stattdessen ruft ein OLE-Server CoDisconnectObject auf, um die Clients eines Objekts erzwungen zu trennen, in der Regel als Reaktion darauf, dass ein Benutzer die Serveranwendung schließt.

Ebenso kann ein OLE-Container, der externe Links zu seinen eingebetteten Objekten unterstützt, CoDisconnectObject aufrufen, um diese Links zu zerstören. Auch hier erfolgt dieser Aufruf normalerweise als Reaktion darauf, dass ein Benutzer die Anwendung schließt. Der Container sollte zunächst IOleObject::Close für alle ole-Objekte aufrufen, von denen jedes IAdviseSink::OnClose-Benachrichtigungen an die verschiedenen Clients senden sollte. Anschließend kann der Container CoDisconnectObject aufrufen, um alle vorhandenen Verbindungen zu schließen.

CoDisconnectObject trennt nicht unbedingt sofort out-of-process-Clients. Wenn gemarshallte Aufrufe für das Serverobjekt ausstehen, trennt CoDisconnectObject das Objekt nur, wenn diese Aufrufe zurückgegeben wurden. In der Zwischenzeit legt CoDisconnectObject ein Flag fest, das bewirkt, dass alle neuen gemarshallten Aufrufe CO_E_OBJNOTCONNECTED zurückgeben.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile combaseapi.h (include Objbase.h)
Bibliothek Ole32.lib
DLL Ole32.dll

Weitere Informationen

IAdviseSink::OnClose

IMarshal::D isconnectObject

IOleObject::Close