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

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

语法

HRESULT DisconnectObject(
  [in] DWORD dwReserved
);

参数

[in] dwReserved

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

返回值

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

注解

此方法是在 对象(而不是代理)上实现的。

给调用方的说明

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

实施者说明

作为其正常关闭代码的一部分,服务器应在其每个运行的对象上调用 CoDisconnectObject,后者又调用 DisconnectObject,用于实现 IMarshal

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

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

要求

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

另请参阅

CoDisconnectObject

IMarshal