异步和同步名字对象
标准同步 OLE 名字对象的客户端通常会创建并保存名字对象的引用,以及绑定过程中使用的绑定上下文。 使用传统名字对象所涉及的组件如下图所示。
客户端通常通过调用 CreateFileMoniker、CreateItemMoniker 或 CreatePointerMoniker 等函数来创建标准名字对象,或者通过 OleSaveToStream 和 OleLoadFromStream 等函数来创建标准名字对象,因为它们可以保存到持久存储中。 也可以通过调用 IBindHost::CreateMoniker 方法来从容器对象中获取名字对象。 客户端通过调用 CreateBindCtx 函数创建绑定上下文,然后通过调用 IMoniker::BindToStorage 或 IMoniker::BindToObject 将绑定上下文传递给名字对象。
如下图所示,异步名字对象的客户端也会创建并保存对名字对象和绑定上下文的引用,以便在绑定过程中使用。
要获得异步行为,客户端需要在绑定状态回调对象上实现 IBindStatusCallback 接口,并调用 RegisterBindStatusCallback 函数或 CreateAsyncBindCtx 函数,以便在绑定上下文中注册该接口。 名字对象在调用 IBindStatusCallback::OnStartBinding 方法时会传递一个指向其 IBinding 接口的指针。 客户端会告诉异步名字对象在名字对象调用 IBindStatusCallback::GetBindInfo 方法返回时要如何进行绑定。
相关主题