关于获得IHTMLDocument2指针问题。

时间:2022-11-20 22:29:14
我是新手,或者新手都算不上。请各位高手帮我解惑。
我在获取IHTMLDocument2这个指针时,遇到了如下问题。后来解决了,但是完全不懂为啥。请各位帮我解释解释
我用的是CDHtmlDialog类。
1、
在CDHtmlDialog类的一个函数中
IHTMLDocument2 *hd;
HRESULT hret = this->GetDHtmlDocument(&hd);
结果返回0x80004002,说无此接口。但是在我修改一个函数相应前,这个函数是好用的啊。this是一个继承了CDHtmlDialog类的指针。
2、后来我改成这个:
CWnd *pCtrl = GetDlgItem(AFX_IDC_BROWSER);

if (pCtrl)
{
lpUnk = pCtrl->GetControllingUnknown(); //GetControlUnknown,也是返回NULL,

}
HRESULT hret;
    hret   =   lpUnk -> QueryInterface(IID_IHTMLDocument2,   (void**)&hd);
    if(FAILED(hret))
    {
            return   ;
    }

lpUnk总是返回的NULL
3、在后来改成如下代码就好用了
 CComPtr<IDispatch> spDispDoc;
 this->m_pBrowserApp->get_Document(&spDispDoc);
     CComPtr<IHTMLDocument2> spHtmlDoc = NULL;
     HRESULT hr = spDispDoc->QueryInterface(IID_IHTMLDocument2, (void**)&spHtmlDoc);
     if (FAILED(hr) || NULL == spHtmlDoc)
     {
         return;
     }

请问,各位达人这1、2种方法为啥原来可以用,现在不能用了,或者说1、2和3有什么区别。我没剩多少了,各位帮帮忙,谢谢。

5 个解决方案

#1


估计你的改动影响了this等指针以及它的一些定义

#2


不用this指针看看吧

#3


我倒是在类中其他函数中有用到这个宏METHOD_PROLOGUE(CtestdDlg,AdviseSink)
STDMETHODIMP_(ULONG) CtestdDlg::XAdviseSink::AddRef()
{
METHOD_PROLOGUE(CtestdDlg,AdviseSink)
return pThis->InternalAddRef();
}

可是这是在不同的函数中啊,请问这有影响吗?

#4


我错了,迷糊了。问题出现在别的地方。多谢2位的回答。是别的地方内存操作错误引起的。。。。

#5


题外话,结贴率125%是怎么回事呢?

#1


估计你的改动影响了this等指针以及它的一些定义

#2


不用this指针看看吧

#3


我倒是在类中其他函数中有用到这个宏METHOD_PROLOGUE(CtestdDlg,AdviseSink)
STDMETHODIMP_(ULONG) CtestdDlg::XAdviseSink::AddRef()
{
METHOD_PROLOGUE(CtestdDlg,AdviseSink)
return pThis->InternalAddRef();
}

可是这是在不同的函数中啊,请问这有影响吗?

#4


我错了,迷糊了。问题出现在别的地方。多谢2位的回答。是别的地方内存操作错误引起的。。。。

#5


题外话,结贴率125%是怎么回事呢?