Iunknown的QueryInterface查询接口的作用

COM组件的一个主要优势是:便于升级。要实现这个优势需要满足两个条件:
1>为了更好的突出DLL的优势,还需要信息隐藏,即封装性。
2>运行时客户程序可动态加载和卸载,采用DLL技术可以实现。

 

1>从封装性看:
      COM组件的信息隐藏采用IUnknown接口来实现,IUnknown意思是未知,即未知的接口,所有的COM接口都需要继承IUnknown接口,因此若某个客户拥有一个IUnknown接口的指针,一是他不知道接口到底是什么类型,二是他还需要知道通过此接口可以查询的其他接口。这时候就需要一个函数来提供这个功能:查询某个组件是否支持某个特定的接口。这是提供函数QueryInterface的主要原因。因为一个COM对象可以实现多个COM接口,当拥有QueryInterface函数后,客户可以在各个接口之间轻松跳动,可以很容易地获得该对象的其它各个接口

 

2>从COM组件需要动态加载看:
      COM组件一旦发布出去,接口将永远保持不变。接口不变是指不能改变接口(即IID,该ID可以标示该接口的唯一性,ta基于GUID),但是可以建立一个新的接口(新的IID)。


   COM组件这时候利用函数QueryInterface对新旧版本进行处理:
   当QueryInterface接受到对老IID查询时,返回老的接口。
   当接收到对新的IID查询时,它将返回新的接口查询。
   对QueryInterface而言,一个IID就是一个接口,所以同某个IID相应的接口绝不会发生变化。对于老的接口仍然保持不变,因此已有客户的运行将不会受到任何影响。对于新客户则额可以自行决定使用老接口还是新接口。这种处理多个版本的方法最有效的地方在于它是无缝的,客户不需要做任何附加的动作。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值