CoDisconnectObject 函数 (combaseapi.h)

断开代表指向指定对象的所有接口指针维护的所有远程进程连接。

只有实际管理对象的进程应调用 CoDisconnectObject

语法

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

参数

[in] pUnk

指向要断开连接的对象上派生自 IUnknown 的任何接口的指针。

[in] dwReserved

此参数是保留的,必须为 0。

返回值

此函数返回S_OK,指示已成功删除与远程进程的所有连接。

注解

CoDisconnectObject 函数使服务器能够正确断开所有外部客户端与 pUnk 指定的对象的连接。

该代码会执行以下任务:

  1. 检查要断开连接的对象是否实现 IMarshal 接口。 如果是,则获取指向该接口的指针;如果不是,则获取指向标准封送处理程序 (即 COM) IMarshal 实现的指针。
  2. 使用它获取的 IMarshal 接口指针,函数随后调用 IMarshal::D isconnectObject 以断开所有进程外客户端的连接。
对象的客户端不调用 CoDisconnectObject 来断开自身与服务器的连接, (客户端应为此使用 IUnknown::Release) 。 相反,OLE 服务器调用 CoDisconnectObject 以强行断开对象的客户端的连接,通常是为了响应用户关闭服务器应用程序。

同样,支持其嵌入对象的外部链接的 OLE 容器可以调用 CoDisconnectObject 来销毁这些链接。 同样,此调用通常是为了响应关闭应用程序的用户。 容器应首先为其所有 OLE 对象调用 IOleObject::Close ,其中每个对象都应向其各个客户端发送 IAdviseSink::OnClose 通知。 然后,容器可以调用 CoDisconnectObject 以关闭任何现有连接。

CoDisconnectObject 不一定立即断开进程外客户端的连接。 如果任何封送调用在服务器对象上挂起, CoDisconnectObject 仅当这些调用已返回时才断开该对象的连接。 同时, CoDisconnectObject 设置一个标志,该标志会导致任何新的封送调用返回CO_E_OBJNOTCONNECTED。

要求

要求
最低受支持的客户端 Windows 2000 专业版 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows 2000 Server [桌面应用 |UWP 应用]
目标平台 Windows
标头 combaseapi.h (包括 Objbase.h)
Library Ole32.lib
DLL Ole32.dll

另请参阅

IAdviseSink::OnClose

IMarshal::D isconnectObject

IOleObject::Close