HRESULT QueryInterface(【in】REFIID iid,【out】void**ppv);
QueryInterface 函数返回值是一个32位的整数,反映了查询结果:
1. S_OK :查到了指定接口,接口的指针存放在ppv输出参数中;
2.E_NOINTERFACE:对象不支持iid所指定的接口,*ppv为NULL;
3.E_UNEXPECTED:发生了意外错误,*ppv为NULL;
如果一个对象支持多个接口,则客户通过QueryInterface函数可以非常灵活滴在接口指针之间来回跳转,而且不同烦人
的客户跳转顺序也不可能一样,所以必须指定一些规则以避免引起矛盾。COM规范给出了以下一些规则:
1.IUnknown接口唯一性:对于一个对象的不同接口指针,查询带的Iunknown接口必须完全相同。也就是说,每个对象的IUnknown接口指针是唯一的。
因此,对于两个接口的指针,可以通过判断其查询到的IUnknown接口指针是否相等来判断它们是否指向同一个对象
2.接口自反性:对一个接口查询其自身总应该是成功。
3.接口对称性:如果一个接口指针查询到另一个接口指针,则从第二个接口指针再回到第一个接口指针必定成功。
4.接口传递性:如果从第一个指针接口查询到第二个接口指针,从第二个接口指针可以查询到第三个接口指针,那么第三个接口指针一定可以查询到以一个接口指针;
5.接口指针查询时间无关性:如果在某一时刻可以查询到某一接口指针,则以后任何时候在查询同样的接口指针,一定可以查询成功。
根据以上的规则从而实现COM组件的灵活使用!