Я использую Microsoft Visual C ++ и Windows 7.
Я разрабатываю панель инструментов IE с ATL и MFC. IE версия 11.0.9600.17420.
Прежде всего, я создал реализацию COM-объекта. IDeskBand
а также IObjectWithSite
интерфейсы.
Во-вторых, я реализовал IDeskBand
методы и IObjectWithSite::SetSite
метод. Требуется только один параметр, IUnknown *pUnkSite
,
Как я помню, я могу сделать pUnkSite->QueryInterface(IID_IOleWindow, (void**)&pOleWindow);
получить интерфейс IOleWindow с сайта, а затем я могу позвонить pOleWindow->GetWindow(&hWnd);
получить дескриптор родительского окна; так что я могу создать свое окно панели инструментов как дочерний элемент окна с этим hWnd
,
Итак, я сделал это и понял, что pUnkSite->QueryInterface(IID_IOleWindow, (void**)&pOleWindow);
возвращается 0x80004002
который E_NOINTERFACE
ошибка, так IOleWindow
не реализуется pUnkSite
объект! Я открыл IE в отладчике, загрузил символы, проследил до QISearch
и понял, что нет реализации IOleWindow
интерфейс. Если я не ошибаюсь это было CIEFrameAuto
интерфейс.
Итак, как я могу получить IOleWindow
интерфейс для родительского окна для моей панели инструментов?
Задача ещё не решена.
Других решений пока нет …