cpElem->get_all(&cpDispColl);
hr = cpElem->get_all(&cpDispColl);
void tstDrillerLevel(BrowserInfo *pInfo, IHTMLElementCollection *pCollection, int nLevel){	if (pCollection == NULL)	{		return;	}	LONG celem = 0;;	HRESULT hr = pCollection->get_length( &celem );	for ( int i=0; i< celem; i++ )	{		VARIANT varIndex;		varIndex.vt = VT_UINT;		varIndex.lVal = i;		VARIANT var2;		VariantInit( &var2 );		CIPtr(IDispatch) cpDisp; 		hr = pCollection->item( varIndex, var2, &cpDisp );		if ( hr != S_OK )		{			continue;		}		CIPtr(IHTMLElement) cpElem;		hr = cpDisp->QueryInterface( IID_IHTMLElement, (void **)&cpElem );		if ( hr == S_OK )		{			BSTR bstr;			hr = cpElem->get_tagName(&bstr);						USES_CONVERSION;			char szLevel[256];			memset(szLevel, 0, sizeof(szLevel));			memset(szLevel, ' ', nLevel);			CString strTag = bstr;			pInfo->pfnOutputString(_T("Parsing element: %s%s"), A2T(szLevel), strTag);			CIPtr(IHTMLImgElement) cpImgElem;			hr = cpDisp->QueryInterface( IID_IHTMLImgElement, (void **)&cpImgElem );			if ( hr == S_OK )			{				cpImgElem->get_href(&bstr);			}			else			{				CIPtr(IHTMLAnchorElement) cpAnchElem;				hr = cpDisp->QueryInterface( IID_IHTMLAnchorElement, (void **)&cpAnchElem );				if ( hr == S_OK )				{					cpAnchElem->get_href(&bstr);				}			}			CIPtr(IDispatch) cpDispColl;			cpElem->get_all(&cpDispColl);			if (hr == S_OK)			{				CIPtr(IHTMLElementCollection) cpColl = cpDispColl;				tstDrillerLevel(pInfo, cpColl, nLevel + 1);			}		}	}}