IExternalConnection 接口 (objidlbase.h)

管理服务器对象的封送或外部连接计数。 维护此类计数的服务器可以检测到它何时没有外部连接,并有条不紊地自行关闭。

继承

IExternalConnection 接口继承自 IUnknown 接口。 IExternalConnection 还具有以下类型的成员:

方法

IExternalConnection 接口包含以下方法。

 
IExternalConnection::AddConnection

IExternalConnection::AddConnection (objidlbase.h) 方法递增对象的强外部连接的计数。
IExternalConnection::ReleaseConnection

IExternalConnection::ReleaseConnection (objidlbase.h) 方法可减少对象的强外部连接的计数。

注解

IExternalConnection 最常在服务器对象上实现,以便在无提示更新后有序关闭指向嵌入对象的链接。 在这种情况下,不实现 IExternalConnection 的对象可能会丢失数据:当最终链接客户端释放嵌入 (服务器) 对象时,将释放对象存根管理器上的最后一个外部连接,从而导致存根管理器释放其指向嵌入对象上的接口的指针,并启动对象的关闭。 此时,服务器对象对链接容器调用 IOleClientSite::SaveObject ,链接容器对 IPersistStorage::Save 的返回调用失败,因为存根管理器不再具有指向嵌入对象的指针。 然后,服务器对象数据的任何未保存更改都将丢失。

但是,如果服务器对象实现 IExternalConnection,则当释放最后一个外部连接时,其存根管理器将不会释放其与对象的连接。 相反,它将保持连接,直到对象准备好销毁自身。

在标准封送处理中,为了增加对象的外部连接计数,COM 在首次封送对象时对对象调用 IExternalConnection::AddConnection 。 存根管理器在获取并释放后续外部连接时,对对象调用 IExternalConnection 的方法。 当对象的外部连接计数为零时,该对象可以保存其数据,然后从运行的对象表中撤消自身,并执行其他任何必要的操作,将其对象引用计数减少到零。

实现 IExternalConnection 的对象应在其外部引用计数降至 0 时对其自身显式调用 CoDisconnectObject 。 此调用将导致存根管理器对 对象调用 Release ,以便对象可以销毁自身。

要求

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

另请参阅

CoDisconnectObject

CoLockObjectExternal

IOleObject