IHTMLElementCollection: из чего состоит?
От: SVV Беларусь  
Дата: 24.09.02 11:44
Оценка:
Привет всем.
использую такой код, для получения 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()");
    }
  }


Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.