第八章 复习COM实现.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
COM特性 潘爱民 /CompCourse 内容 复习:COM实现 COM可重用模型 √ COM跨进程模型 √ COM线程模型 COM安全性 复习:对象创建过程 复习:TreeView组件的注册信息 复习:类厂(Class Factory) 类厂:用于创建COM对象的COM对象 目标:完成COM对象的创建过程,更好地把客户与对象隔离开来。 特殊性: 实现一个或多个创建接口,缺省的接口为IClassFactory 类厂本身没有CLSID 但是类厂的引用计数不参与对组件生命周期的控制,如果需要,可以使用锁计数功能 复习:类厂(续) 类厂与COM对象有一一对应关系 复习:COM创建函数 CoGetClassObject CoCreateInstance CoCreateInstanceEx 注意:对于DLL组件,创建函数调用DllGetClassObject引出函数创建类厂,再由类厂创建COM对象 复习:COM库 COM库的初始化 COM库的内存管理 组件程序的装载和卸载 常用函数和HRESULT GUID管理 创建函数 初始化函数 内存管理函数 字符串使用OLECHAR类型 复习:实现一个进程内COM组件的步骤 定义必要的CLSID和IID 实现COM对象 通过QueryInterface暴露其接口 管理引用计数,注意对全局引用计数的维护 实现类厂对象 对象的引用计数不记在全局对象引用计数内 维护锁计数 实现DllGetClassObject、DllCanUnloadNow (可选)实现两个注册函数 可重用性(reuse,复用) 重用性:当一个程序单元能够对其他的程序单元提供功能服务时,尽可能地重用原先程序单元的代码,既可以在源代码一级重用,也可以在可执行代码一级重用。 COM重用性:因为COM是建立在二进制代码基础上的标准,所以其重用性也必然建立于二进制代码上。 COM重用模型:包容和聚合 真正的重用:是实现重用而不是代码重用 C++类的重用模型 前提:假设有一个基类COldClass 目标:实现一个新类CNewClass,要求重用COldClass中的功能,而不是重新实现 做法:两种模型 让CNewClass从COldClass派生,即 class CNewClass: public COldClass {...}; 复合类或者嵌套类,在CNewClass中包含一个数据成员,其类型为COldClass C++类的两种重用模型 继承模型,直接继承基类COldClass的所有方法和数据成员,“is-a”关系 客户直接看到基类的接口(public成员) 复合模型,把基类的功能包含在内部,“has-a”关系 客户看不到基类的信息 COM重用模型 前提:假设有一个COM对象A 目标:实现一个新对象B,要求重用对象A的功能,而不是重新实现原来已有的功能 做法:两种模型 包容(containment) 聚合(aggregation) COM包容模型 包容模型说明 外部对象包容内部对象的接口 外部对象的接口与内部对象的接口可以不同 包容模型的实质是客户-组件关系,在包容代码的前后可以插入其他的代码,甚至可以有条件地重用 客户看不到内部对象 内部对象的生存期包含在外部对象的生存期之内 聚合模型 聚合模型说明 聚合对象和被聚合对象协同工作 客户直接与内部对象交互,但它并不知道 IUnknown唯一性是COM的基本要求 重用针对某个接口而言,聚合和包容并不矛盾,在一个对象上可以同时使用 聚合和包容的选择策略 包容模型实现 定义接口: class ISomeInterface : public IUnknown { public: virtual HRESULT __stdcall SomeFunction() = 0; }; class IOtherInterface : public IUnknown { public: virtual HRESULT __stdcall OtherFunction() = 0; }; 包容:外部对象定义 class CB : public ISomeInterface , public IOtherInterface { protected: ULONG m_Ref; public: CB ( ); ~ CB (); HRESULT __stdcall QueryInterface(const IID iid, void **ppv); ULONG __stdcall AddRef(); ULONG __stdcall Release(); //ISomeInterface members HRESU

文档评论(0)

xiaofei2001128 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档