- 1、本文档共65页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
永久对象-CMLab
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
您可能关注的文档
最近下载
- 高校智慧教室实验儿童教育室实训平台项目交货方案及时间进度计划安排.pdf VIP
- 党员杨善洲先进事迹.PPT VIP
- DB3301T 0170-2018 道路交通指示标识英文译写规范.docx VIP
- 中国普通型客衣专用洗衣粉行业市场规模及未来投资方向研究报告.pdf VIP
- 遗传与进化《第4章 生物的进化》大单元整体教学设计.docx VIP
- MZ∕T 137-2019 遗体冷冻柜通用技术条件.pdf VIP
- 合成生物学-全套PPT课件.pptx VIP
- 教材专家评审意见表(模板).doc VIP
- 《医院用磁浮式安全电装置核心技术规范及数智化管理云平台规范》.pdf VIP
- JJF(陕) 051-2021 机动车 GNSS 区间测速监测系统标准装置校准规范.docx VIP
文档评论(0)