我为 IE7 编写了一个 Active X 插件,它实现了 IObjectWithSite 除了一些其他必要的接口(注意没有 IOleClient)。该接口由IE7查询调用。在 SetSite() 调用期间,我检索了一个指向 IE7 站点接口的指针,我可以使用以下方法检索 IHTMLDocument2 接口:
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 接口也不起作用,所以我已经对此进行了测试。
有任何想法吗?