IMarshal::D isconnectObject 方法 (objidl.h)

释放与 对象的所有连接。 对象的服务器在关闭之前调用对象的此方法实现。

语法

HRESULT DisconnectObject(
  [in] DWORD dwReserved
);

参数

[in] dwReserved

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

返回值

如果该方法成功,则返回值S_OK。 否则,它将E_FAIL。

注解

此方法在 对象上实现,而不是在代理上实现。

调用方备注

当最终用户强行关闭具有一个或多个实现 IMarshal 的正在运行对象的 COM 服务器时,通常会出现调用此方法的情况。 在关闭之前,服务器会调用 CoDisconnectObject 函数来释放与其所有正在运行的对象的外部连接。 但是,对于实现 IMarshal 的每个对象,此函数调用 DisconnectObject ,以便管理其自己的封送处理的每个对象都可以采取措施通知其代理即将关闭。

实施者说明

作为其正常关机代码的一部分,服务器应调用 CoDisconnectObject,而 CoDisconnectObject 反过来又调用 DisconnectObject,用于实现 IMarshal 的每个正在运行的对象。

此方法的任何实现的结果应该是使代理能够通过返回RPC_E_DISCONNECTED或CO_E_OBJNOTCONNECTED来响应来自其客户端的所有后续调用,而不是尝试将调用转发到原始对象。 由客户端来销毁代理。

如果要为不可变对象(如名字对象)实现此方法,则实现不需要执行任何操作,因为此类对象通常整个复制到客户端的地址空间中。 因此,它们既没有代理,也没有与原始对象的连接。 有关封送不可变对象的详细信息,请参阅 IMarshal 主题的“何时实现”部分。

要求

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

另请参阅

CoDisconnectObject

IMarshal