COM_QueryInterface
QueryInterface
该纯虚函数在IUnknown接口中声明,用于查询组件是否支持某个接口。
QueryInterface的实现规则
- QueryInterface返回的总是同一个IUnknown指针
- 如果客户曾获取过某个接口,那么它将总能获取次接口
- 客户可以再次获取已经拥有的接口
- 客户可以返回到起始接口
- 若能够从某个接口获取特定接口,那么可以从任意接口获取此接口
QueryInterface定义了组件
QueryInterface是COM最为重要的部分,一个组件实际上是由QueryInterface定义的。组件所支持的接口集实际上就是QueryInterface能够返回接口指针的那些接口。
客户并了解组件的唯一方法就是进行查询。
新版本组件的处理
COM中的接口是永远不会改变的。每个接口都以一个唯一的接口标识符(IID)。当组件需要更新的时候,我们通常会建立一个新的接口并为之指定一个新的IID。对于QueryInterface而言,IID就是一个接口。
只要对组件的修改会影响客户的正常运行,就应该为接口指定新的IID。
总结
QueryInterface是将COM组件的编写过程同编写C++类的过程区分开来的一种新特性。
