假如一个组件中有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接口呢?

解决方案 »

  1.   

    既然是接口了,就可以用了,不明白为何用A查询BC
      

  2.   

    可以的,COM组件的QueryInterface必须满足一条规则就是 若能从某个组件获取某个特定接口,那么客户将可以通过此组件所支持的任意接口获取此接口
      

  3.   

    你没有弄清楚这几个接口的关系disp是怎么来的?是browser->get_Document()来的而不是browser->QueryInterface()