1. 1、本文档共65页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
CM培训

COM:可连接对象 结构化存储 潘爱民 /CompCourse 内容 复习:COM基础 可连接对象 结构化存储 复习:COM基础 聚合模型的关键 可连接对象(connectable object) 内容: 可连接对象结构模型 实现可连接对象(源对象) 客户-源对象-接收器的协作过程 可连接对象的程序实现 双向通信机制 ——客户与可连接对象的关系 两个概念 入接口(incoming interface) 组件对象实现入接口,客户通过入接口调用对象提供的功能 客户和组件都需要知道接口的类型信息 出接口(outgoing interface) 客户端提供的COM对象实现出接口 组件端的对象通过出接口调用客户提供的功能 组件提供接口类型信息,客户实现该接口 类似于回调(callback),但是要复杂和灵活得多 出接口 类型信息由组件一方提供 客户提供出接口的实现,实现出接口的COM对象被称为接收器对象(sink) sink没有CLSID,也不需要类厂 也是一个COM接口,有IID 每个成员函数代表了: 事件event 通知notification 请求request 源对象 or 可连接对象 Connectable object,source 普通的COM对象,支持一个或者多个出接口 提供出接口的类型信息 通过IProvideClassInfo[2]接口 通过typelib 客户与可连接对象之间的两种结构 可连接对象的基本结构 可连接对象 如何管理多个出接口 每个出接口对应一个连接点对象 通过连接点枚举器管理 对于每个出接口,如何管理多个客户连接 通过连接枚举器管理多个连接 实现可连接对象(源对象)(一) 枚举器 内部对象,不需要类厂和CLSID 其含义就如同指针——智能指针 枚举器接口模板 class IEnumELT_T : public IUnknown { virtual HRESULT Next( ULONG celt, ELT_T *rgelt, ULONG *pceltFetched ) = 0; virtual HRESULT Skip( ULONG celt ) = 0; virtual HRESULT Reset( void ) = 0; virtual HRESULT Clone( IEnumELT_T**ppenum ) = 0; }; 枚举器的用法 class IStringManager : public IUnknown { virtual IEnumString* EnumStrings(void) = 0; }; void SomeFunc(IStringManager * pStringMan) { String psz; IEnumString * penum; penum=pStringMan-EnumStrings(); while (S_OK == penum-Next(1, psz, NULL)) { … //Do something with the string in psz and free it } penum-Release(); return; } 实现可连接对象(源对象)(二) IConnectionPointContainer接口 class IConnectionPointContainer : public IUnknown { virtual HRESULT EnumConnectionPoints(IEnumConnectionPoints **) = 0; virtual HRESULT FindConnectionPoint(const IID *, IConnectionPoint **) = 0; }; IEnumConnectionPoints接口 class IEnumConnectionPoints : public IUnknown { virtual HRESULT Next( ULONG cConnections, IConnectionPoint **rgpcn, ULONG *pcFetched) = 0; virtual HRESULT Skip( ULONG cConnections) = 0; virtual HRESULT Reset(void) = 0; virtual HRESULT Clone( IEnumConnectionPoints **ppEnum) = 0; }; 实现可连接对象(源对象)(三) 连接点和IConnectionPoint接口 class IConn

文档评论(0)

docman126 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档