COM编程注意小结

 

一:

在返回值判断的时候常之前都是采用如下方式

 

lpDispatch = m_Browser.GetDocument(); hr = lpDispatch->QueryInterface(IID_IHTMLDocument2, (void**)&lpHtmlDoc2); if (hr != S_OK ) { return FALSE; } hr = lpDispatch->QueryInterface(IID_IHTMLDocument3, (void**)&lpHtmlDoc3); if (hr != S_OK ) { lpHtmlDoc2.Release(); return FALSE; }  

实际上这样并不完全正确 今天在编程的时候就遇到一个问题

hr 返回s_OK 但是lphtmDoc2为空 从而产生异常

 

所以以后校验方式如下

lpDispatch = m_Browser.GetDocument(); hr = lpDispatch->QueryInterface(IID_IHTMLDocument2, (void**)&lpHtmlDoc2); if ((hr != S_OK ) || (lpHtmlDoc2 == NULL)) { return FALSE; } hr = lpDispatch->QueryInterface(IID_IHTMLDocument3, (void**)&lpHtmlDoc3); if ((hr != S_OK ) || (lpHtmlDoc3 == NULL)) { lpHtmlDoc2.Release(); return FALSE; }  

 

 

二:

当_variant_t,variant为返回值时  后边又要对其进行操作的时候要判断 variant.vt 是否为VT_NULL

_variant_t varValue; CString Value; hr = lpElem->getAttribute(_bstr_t(_T("src")),1,&varValue); if ((hr != S_OK) || (varValue.vt = VT_NULL)) { continue; } 

 

 

你可能感兴趣的:(编程,null)