IExternalConnection 接口 (objidl.h)
管理服务器对象的封送或外部连接计数。 维护此类计数的服务器可以检测到它何时没有外部连接,并有条不紊地自行关闭。
继承
IExternalConnection 接口继承自 IUnknown 接口。 IExternalConnection 还具有以下类型的成员:
方法
IExternalConnection 接口包含以下方法。
IExternalConnection::AddConnection IExternalConnection::AddConnection 方法 (objidl.h) 递增对象的强外部连接的计数。 |
IExternalConnection::ReleaseConnection IExternalConnection::ReleaseConnection 方法 (objidl.h) 递减对象的强外部连接的计数。 |
注解
IExternalConnection 最常在服务器对象上实现,以便在无提示更新后有序关闭指向嵌入对象的链接。 在这种情况下,不实现 IExternalConnection 的对象可能会丢失数据:当最终链接客户端释放嵌入 (服务器) 对象时,将释放对象存根管理器上的最后一个外部连接,从而导致存根管理器释放其指向嵌入对象上的接口的指针,并启动对象的关闭。 此时,服务器对象对链接容器调用 IOleClientSite::SaveObject ,链接容器对 IPersistStorage::Save 的返回调用失败,因为存根管理器不再具有指向嵌入对象的指针。 然后,服务器对象数据的任何未保存更改都将丢失。
但是,如果服务器对象实现 IExternalConnection,则当释放最后一个外部连接时,其存根管理器将不会释放其与对象的连接。 相反,它将保持连接,直到对象准备好销毁自身。
在标准封送处理中,为了增加对象的外部连接计数,COM 在首次封送对象时对对象调用 IExternalConnection::AddConnection 。 存根管理器在获取并释放后续外部连接时,对对象调用 IExternalConnection 的方法。 当对象的外部连接计数为零时,该对象可以保存其数据,然后从运行的对象表中撤消自身,并执行其他任何必要的操作,将其对象引用计数减少到零。
实现 IExternalConnection 的对象应在其外部引用计数降至 0 时对其自身显式调用 CoDisconnectObject 。 此调用将导致存根管理器对 对象调用 Release ,以便对象可以销毁自身。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | objidl.h (包括 ObjIdl.h) |