J'ai écrit un plugin Active X pour IE7 qui implémente IObjectWithSite en plus d'autres interfaces nécessaires (notez IOleClient). Cette interface est interrogée et appelée par IE7. Au cours de la SetSite() appeler je récupère un pointeur vers l'interface du site de IE7 que je peux utiliser pour récupérer l'interface IHTMLDocument2 en utilisant l'approche suivante:Comment puis-je récupérer l'interface IPIEHTMLDocument2 sur 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 */
}
J'ai essayé une approche similaire sur PIE et en utilisant le code suivant, cependant , même l'interface IPIEHTMLWindow2 ne peut être acquise, donc je suis coincé:
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 */
}
Utilisation de l'interface IServiceProvider ne fonctionne pas non plus, donc je l'ai déjà testé cela.
Des idées?