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

初学com,关于接口的传递性,小弟有个疑惑请大牛们看看
假如一个组件中有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接口呢?

------解决方案--------------------
你没有弄清楚这几个接口的关系

disp是怎么来的?

是browser->get_Document()来的而不是browser->QueryInterface()