初学com,关于接口的传递性,小弟有个疑惑请大牛们看看

lxslove 2012-11-02 02:30:51
假如一个组件中有A、B、C三个接口,是否可以通过A的QueryInterface查询到B和C呢?
下面有一个代码:
IWebBrowser2Ptr browser;
hr = pWebWindow->m_wndIE.QueryControl(__uuidof(IWebBrowser2), (void**)&browser);
ATLASSERT(SUCCEEDED(hr));
CComPtr<IDispatch> disp;
hr = browser->get_Document(&disp);
ATLASSERT(SUCCEEDED(hr));
//CComPtr<IHTMLDocument2> doc;
CComQIPtr<IOleInPlaceActiveObject> spInPlace;
hr = disp->QueryInterface(__uuidof(IOleInPlaceActiveObject), (void**)&spInPlace);
ATLASSERT(SUCCEEDED(hr));
if (spInPlace)
bool bRet = (spInPlace->TranslateAccelerator(&msg) == S_OK) ? TRUE : FALSE;

这段代码中,
hr = disp->QueryInterface(__uuidof(IOleInPlaceActiveObject), (void**)&spInPlace);这里直接改为
hr = browser->QueryInterface(__uuidof(IOleInPlaceActiveObject), (void**)&spInPlace);为什么就不行呢?
browser接口能查询到document接口,document接口可以查询到IOleInPlaceActiveObject接口,那么为什么不直接用browser接口查询IOleInPlaceActiveObject接口呢?
...全文
160 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wendysuly 2012-11-07
  • 打赏
  • 举报
回复
你没有弄清楚这几个接口的关系 disp是怎么来的? 是browser->get_Document()来的而不是browser->QueryInterface()
Wendysuly 2012-11-07
  • 打赏
  • 举报
回复
可以的,COM组件的QueryInterface必须满足一条规则就是 若能从某个组件获取某个特定接口,那么客户将可以通过此组件所支持的任意接口获取此接口
lgstudyvc 2012-11-02
  • 打赏
  • 举报
回复
既然是接口了,就可以用了,不明白为何用A查询BC
lxslove 2012-11-02
  • 打赏
  • 举报
回复
顶一下!

3,245

社区成员

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

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