zoukankan      html  css  js  c++  java
  • COM技术内幕第八章笔记组件复用

    类,可以继承其基类的代码实现。

    COM支持的继承是接口的继承,C++中基类的类型、接口都属此列。

    粗浅的说,“实现继承”,以做饭为例,“实现继承”的派生类不用管饭是怎么做的,基类会完成;“接口继承”的基类只是定义了一个做饭接口,饭怎么做是要由派生类去实现。(暴露了暴露了-__-b)

    COM组件的定义也就是一系列接口,志在立法,而非执法。它不支持实现继承这是毋庸置疑理所当然的。

    C++的抽象基类和COM接口看起来像是天生一对。

    包容和聚合

    就是一个组件里使用另一个组件的技术。前者即外部组件,后者即内部组件,虽然聚合听起来没有从属关系。

    包容时,外部组件只是内部组件的一个客户;聚合时,外部组件直接把内部组件的接口返回给客户。

    这里就会出现问题。当客户请求一个接口时,实现该接口的可能是聚合的内部组件,同时外部组件可能没有调用内部组件的这个接口,因此请求就会失败。解决方法就暗藏在CoCreateInstance函数和类厂的CreateInstance函数的参数pUnkownOuter中。pUnkownOuter给内部组件传递外部组件的IUnknown指针,通知新组件,你是被俺聚合的。

    而为了支持聚合,内部组件必然要实现两个IUnknown接口,一个是通常的已知接口的实现,一个就是未知接口,对未知接口,将把请求转发给外部组件。

    截至前八章,本章第八章最难和最难。代理接口非代理接口的定义很绕。宜常回头看看。

  • 相关阅读:
    java操作redis之jedis篇
    实现指定步长循环后移字符串数组算法
    【PAT Advanced Level】1006. Sign In and Sign Out (25)
    银行计算利息
    中国人、美国人、北京人
    网络子系统55_ip协议分片重组_加入ipq
    C#拦截系统消息的方法-Application.AddMessageFilter
    C#实现在Form上截取消息的两种方法
    Geek改变世界
    中国黑客传说:游走在黑暗中的精灵
  • 原文地址:https://www.cnblogs.com/mumuliang/p/1873484.html
Copyright © 2011-2022 走看看