我在获取IHTMLDocument2这个指针时,遇到了如下问题。后来解决了,但是完全不懂为啥。请各位帮我解释解释
我用的是CDHtmlDialog类。
1、
在CDHtmlDialog类的一个函数中
IHTMLDocument2 *hd;结果返回0x80004002,说无此接口。但是在我修改一个函数相应前,这个函数是好用的啊。this是一个继承了CDHtmlDialog类的指针。
HRESULT hret = this->GetDHtmlDocument(&hd);
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%是怎么回事呢?