Como funciona o webbrowser? ajudem-me por favor!

Tô no terceiro ano do técnico de Informática Industrial e preciso fazer o tal do tcc, bem ele tá pronto!!

Tá tudo funcionando e pans… mas tenho uma dúvida em um único código pronto que peguei na internet

void __fastcall Tfrmbrowser::cmdlinksClick(TObject *Sender) { ListBox1->Clear(); IHTMLDocument2 *HTMLDoc = NULL; if(SUCCEEDED(webs->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&HTMLDoc))){ IHTMLElementCollection *pAll = NULL; if(SUCCEEDED(HTMLDoc->get_links(&pAll))){ long collSize; pAll->get_length(&collSize); IDispatch* id; VARIANT one; for(int idx=0;idx<collSize;idx++){ one.vt = VT_UINT; one.lVal = idx; VARIANT two = {0}; pAll->item(one,two,&id); IHTMLElement* pElem = NULL; id->QueryInterface( IID_IHTMLElement, (LPVOID*)&pElem ); BSTR bstr = NULL; pElem->toString(&bstr); ListBox1->Items->Add(bstr); } pAll->Release(); } HTMLDoc->Release(); } }

Esse código pega todos os links existentes em uma página web que é aberta pelo cppwebbrowser do c++!

Só que como ele faz isso? Alguém poderia ter alguma explicaçãozinha ou dar algo pra eu estudar… Isso tá mexendo com o quê?

Desde já mto obrgiado!

Se você realmente quer aprender, pode consultar o MSDN:

http://msdn.microsoft.com/en-us/library/aa752574(VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa703928(VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa752279(VS.85).aspx

Obviamente isso só funciona no IE (que é o programa que fornece essas interfaces COM que você usou). Dica: não se preocupe muito em saber o que é “QueryInterface”, “SUCCEEDED” ou outras coisas. Tente entender essa parte de código pensando em nível alto e vendo os nomes dos métodos que você vai encontrar na documentação das interfaces que eu lhe passei acima.

Outra dica: o documento que lhe passei menciona algo como “links”, não “get_links” como está no programa que você mostrou. Mas é que o COM (que é usado nesse programa) tem um esquema parecido com o do Java de setters e getters, só que as convenções são um pouco diferentes ( para uma propriedade “links”, em vez de usar getLinks, como no Java, ele usa “get_links”. ) E em vez de usar setProtocol, ele usa “put_protocol”. OK?

Bom, vou dar só uma explicadinha.

#                                 IHTMLElement* pElem = NULL;  
#                                 id->QueryInterface( IID_IHTMLElement, (LPVOID*)&pElem );  

é mais ou menos isto aqui (em pseudo-Java):

     IHTMLElement pElem = (IHTMLElement) id;

E

#                 IHTMLElementCollection *pAll = NULL;  
#                 if(SUCCEEDED(HTMLDoc->get_links(&pAll))){  
#                         long collSize;  
#                         pAll->get_length(&collSize);  

é mais ou menos

    IHTMLElementCollection pAll = null;
    if ((pAll = HTMLDoc.getLinks()) != null) {
        long collSize = pAll.getLength();

entanglement, muito muito muito obrigado meeesmo!

Você não sabe o quanto me ajudou, eu vou estudar e anotar suas explicações pra aprender!!

Com isso, eu já passo de ano! O restante, eu quem fiz mesmo daí eu próprio posso explicar

Sinceramente, não conseguiria viver sem vocês do guj _ obg mesmo!