Привет всем.
использую такой код, для получения IHTMLElementCollection не нулевой длины (get_length больше 100). далее прошу IDispatch каждого элемента — все ок, НО: какой интерфейс можно поросить у этого IDispatch, если в MSDN написано, что эта коллекция состоит из "LINK Element | LINK Object" и "AREA Element | AREA Object"? если просить IHTMLLinkElement или IHLink, то вызов QueryInterface никогда не будет успешным
IUnknown *pUnk = theApp.m_pBrowser->m_spOleObject;
IHTMLDocument2 *pDoc2 = NULL;
VARIANT v, vIndex;
IHTMLElementCollection *pEColl = NULL;
long i, ECLen;
IDispatch *pDispatch;
IHTMLLinkElement *pLink;
pUnk->QueryInterface (__uuidof(IHTMLDocument2), (void**)&pDoc2);
pDoc2->get_links (&pEColl);
pEColl->get_length (&ECLen);
if (ECLen==0)
MessageBox ("IHTMLElementCollection Empty"); // это сообщение никогда не появляется
v.vt = VT_I4;
vIndex.vt = VT_I4;
vIndex.intVal = 0;
for (i=0; i<ECLen; i++)
{
v.intVal = i; pDispatch = NULL;
pEColl->item (v, vIndex, &pDispatch);
if (pDispatch)
{
pLink = NULL;
// если просить IHTMLLinkElement или IHLink, то приводимый ниже вызов QueryInterface никогда не будет успешным
pDispatch->QueryInterface (__uuidof(IHlink), (void**)&pLink);
if (pLink)
MessageBox ("Success: Target Ok", "CWrView::CorrectLinks()");
}
}
Спасибо.