Я написал Active X-плагин для IE7, который реализует IObjectWithSite, помимо некоторых других необходимых интерфейсов (обратите внимание на IOleClient). Этот интерфейс запрашивается и вызывается IE7. Во время SetSite() вызов я получить указатель на интерфейс сайта IE7, который я могу использовать, чтобы получить интерфейс IHTMLDocument2 используя следующий подход:Как получить интерфейс IPIEHTMLDocument2 на IE Mobile
IUnknown *site = pUnkSite; /* retrieved from IE7 during SetSite() call */
IServiceProvider *sp = NULL;
IHTMLWindow2 *win = NULL;
IHTMLDocument2 *doc = NULL;
if(site) {
site->QueryInterface(IID_IServiceProvider, (void **)&sp);
if(sp) {
sp->QueryService(IID_IHTMLWindow2, IID_IHTMLWindow2, (void **)&win);
if(win) {
win->get_document(&doc);
}
}
}
if(doc) {
/* found */
}
Я попробовал похож подход к PIE, а также с помощью следующего кода, однако , даже интерфейс IPIEHTMLWindow2 не может быть получен, так что я застрял:
IUnknown *site = pUnkSite; /* retrieved from PIE during SetSite() call */
IPIEHTMLWindow2 *win = NULL;
IPIEHTMLDocument1 *tmp = NULL;
IPIEHTMLDocument2 *doc = NULL;
if(site) {
site->QueryInterface(__uuidof(*win), (void **)&win);
if(win) { /* never the case */
win->get_document(&tmp);
if(tmp) {
tmp->QueryInterface(__uuidof(*doc), (void **)&doc);
}
}
}
if(doc) {
/* found */
}
Использование интерфейса IServiceProvider не работает, либо, так что я уже испытал это.
Любые идеи?