COM笔记(QueryInterface接口查询)
2012-10-19 16:25
288 查看
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组件的灵活使用!
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组件的灵活使用!
相关文章推荐
- COM技术内幕第三章笔记-接口查询
- 无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类 型“Excel._Application”。此操作失败的原因是对 IID 为“{000208D5 -0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来 自 HRESULT:
- 错误处理(4)—— “{000208D5-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败
- COM编程中的接口查询QueryInterface的实现原理
- COM编程中的接口查询QueryInterface的实现原理
- COM组件学习笔记--COM接口的简单实践
- COM笔记-接口
- Iunknown的QueryInterface查询接口的作用
- C#中COM操作(二)---接口查询
- COM笔记-接口
- COM个人笔记(标准类厂接口:IClassFactory)
- 此操作失败的原因是对 IID 为“{000208DA-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface
- 枚举桌面应用程序lnk路径并得到对应程序的绝对路径(使用SHGetDesktopFolder函数枚举,然后使用COM查询IShellFolder,IShellLink和IPersistFile接口)
- COM笔记-接口
- mybatis逆向工程的Example类用法==笔记==【单表操作只需调用,多表查询需要自定义sql+mapper接口方法(待补全)】
- 有效的使用和设计COM智能指针——条款11:以类型安全的方式创建资源和查询接口
- C#中COM操作(二)---接口查询
- 解决 无法将类型为“Excel._Application的QueryInterface”的 COM 对象强制转换为接口类型
- C#中COM操作(二)---接口查询
- 看我鼓捣华西安全网(cha.hxsec.com)密码泄露查询接口(有意思的js混淆)