请问QueryInterface有什么用呢?

sigh02 2008-05-29 10:02:44
如果只有一个接口,根本就用不上queryinterface啊
如果有多个接口,也可以CoCreateInstance的时候传进去不同的IID就行了啊

不好意思,刚学习com,问题比较初级....
...全文
365 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
SOMMERS 2008-05-30
  • 打赏
  • 举报
回复
COM接口是通过继承继承方式来进行建立的
那么我现在想通过IUnkown接口得到IMyInterface接口怎么办呢?
于是QueryInterface诞生了通过传递一个标识号(GUID)来找到IUnkown子类中是否有一个接口叫(GUID)你需要的那个接口。
《COM本质论》有这个论述
stivenjia 2008-05-30
  • 打赏
  • 举报
回复
COM接口是通过继承继承方式来进行建立的
那么我现在想通过IUnkown接口得到IMyInterface接口怎么办呢?
于是QueryInterface诞生了通过传递一个标识号(GUID)来找到IUnkown子类中是否有一个接口叫(GUID)你需要的那个接口。
《COM本质论》有这个论述
sigh02 2008-05-30
  • 打赏
  • 举报
回复
多谢sjdev,但是akirya 和arong1234的话,我不太明白啊,CoCreateInstance得时候第四个参数可以指明IID返回我想要的任意接口啊,怎么会只返回IUnknown呢?
sigh02 2008-05-30
  • 打赏
  • 举报
回复
那么是不是不推荐CoCreateInstance的时候直接获得一个接口呢?
还是说,通过CoCreateInstance得到第一个接口,然后利用QueryInterface根据这第一个接口得到其余的接口?
arong1234 2008-05-29
  • 打赏
  • 举报
回复
CoCreateInstance返回的也是IUnknown*,因此即使只有一个接口,还是需要QueryInterface
sjdev 2008-05-29
  • 打赏
  • 举报
回复
譬如:MYCOM实现了IMyInterface1,IMyInterface2.
你创建MYCOM时,

// 使用的是接口IMyInterface1
CComQIPtr<IMyInterface1> spMyCom;
spMyCom.CoCreateInstance(CLSID_MYCOM);

// 如果现在想使用接口IMyInterface2的函数怎么办?
spMyCom.QueryInterface();


总不能再次CoCreateInstance一次吧。

  • 打赏
  • 举报
回复
呃,
COM怎么也是2个接口才对 IUnknown和你自己的接口
sjdev 2008-05-29
  • 打赏
  • 举报
回复
[Quote=引用楼主 sigh02 的帖子:]
如果只有一个接口,根本就用不上queryinterface啊
如果有多个接口,也可以CoCreateInstance的时候传进去不同的IID就行了啊

不好意思,刚学习com,问题比较初级....
[/Quote]
你如果CoCreateInstance就是重复创建对象。但QueryInterface没有。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧