Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Me salta excepción con CppWebBrowser

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Me salta excepción con CppWebBrowser Responder citando

Bueno hace tiempo que pregunta acerca de como acceder al cuerpo de una pagina web en texto plano, en aquel entonces obtuve respuesta y llevo ese codigo bastante tiempo, pero de vez en cuando obtengo alguna excepción, ultimamente la obtengo en un sitio muy concreto y no se a que se puede deber. Aquí pongo el codigo a ver si alguien le encuentra algo de sentido.

Código:

 TCppWebBrowser *Navegador2=new TCppWebBrowser(this);
 Navegador2->Left=32;
 Navegador2->Top=95;
 Navegador2->Height=33;
 Navegador2->Width=145;
 Navegador2->Show();
 WideString url="http://" + www_servidor_ip + "/scripts/genera_grupos_clientes.php?codigo_cliente=" + codigo_cliente;
 Navegador2->Navigate(url);

 // 2º Paso comprobaremos que nos devuelve el navegador
 // Cargarmos un documento y esperamos a que termine
 while (Navegador2->Busy) {
        Application->ProcessMessages();
 }

 try {
    if (Navegador2->Document) {
       IHTMLDocument2 *pDocument;
       Navegador2->Document->QueryInterface<IHTMLDocument2>(&pDocument);
       IHTMLElement *pElement;
       pDocument->get_body(&pElement);
       pElement->get_parentElement(&pElement);
       wchar_t *tmp;
       pElement->get_innerText(&tmp);
       resultado=tmp;
       pElement->Release();
       pDocument->Release();
   }
 } catch (const Excecption &e) {
    ShowMessage(e.Message);
 }
 delete(Navegador2);


La variable resultado es del tipo AnsiString, luego simplemente tengo que leer esa variable y ya esta. El problema es que de vez en cuando se dispara una excepcion, lo que no entiendo es porque a veces se dispara y a veces no.

La excepción salta en la linea:
Código:
 pElement->get_parentElement(&pElement);


Y el texto de la excepción es este:
Project ModuloInternet.exe raised exception class EAccessViolation with message 'Access violation at address 00409AF4. Read of address 00000000'. Process stoped. Use step or run to continue.

Que me decis chicos que puede estar pasando ?
En ese mismo programa lo hago por muchos más sitios y no hay problema, aunque alguna vez ha saltado en otro sitio, y un sitio concreto que tengo un bucle que a veces se ejecuta más de 100 veces, lo mismo salta alguna vez. ¿Porque podría ser?

Ciao y gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Hace tiempo me contesto _Leo para intentar echarme un mano con este tema, pero al final la cosa por lo visto vuelve a surgir. Aquí pongo el enlace al citado mensaje, a ver si _Leo me puedes echar un cable. Gracias.

https://cppbuilder.es/viewtopic.php?t=4511&highlight=cppwebbrowser
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Nadie se anime a darme alguna sugerencia de posible solución ?

Perdonadme si os doy un poco la paliza.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Aqui dejo una modificacion, pasandole el argumento Responder citando

Cita:
wchar_t dir_URL[80];

Edit1->Text.WideChar(dir_URL, 80);

ShowMessage(dir_URL);
// Cargarmos un documento y esperamos a que termine
CppWebBrowser1->Navigate(dir_URL);
while (CppWebBrowser1->Busy)
Application->ProcessMessages();

if (CppWebBrowser1->Document)
{

IHTMLDocument2 *pDocument;
CppWebBrowser1->Document->QueryInterface<IHTMLDocument2>(&pDocument);
IHTMLElement *pElement;
pDocument->get_body(&pElement);
pElement->get_parentElement(&pElement);
wchar_t *tmp;
pElement->get_outerHTML(&tmp);
Memo1->Lines->Text = tmp;
pElement->Release();
pDocument->Release();
}
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola,

A mi me pasa lo mismo. A veces da error y otras no.
Lo que he hecho de momento (lo estoy dejando para el final y depurar varias cosas mas y asi ganar tiempo) es lo siguiente: esa parte la pongo en un try/catch cuando salta la excepcion la repito.

Si da error, solo lo hace una vez (de momento), a la siguiente cuela.

Funcionar ... funciona, de todas formas a ver si alguien da con la solucion.

Tengo puesto esto:
Código:

    bool salir;
    int intento;

    intento=0;
    salir=false;

    if (VarType(IE.OlePropertyGet("document"))!=varEmpty)
    {
        IHTMLDocument2 * pDocument;
        static_cast<IDispatch*>(IE.OlePropertyGet("document"))->
                            QueryInterface<IHTMLDocument2>(&pDocument);
        IHTMLElement *pElement;

        do
        {
            try
            {
                pDocument->get_body(&pElement);
                pElement->get_parentElement(&pElement);
                salir=true;
            }
            catch ( ... )
            {
                intento++;
            }
            if (intento>=5)
            {
                char buf[255];
                int respuesta;

                wsprintf(buf, "No ha sido posible conectar con la pagina.\n¿Desea volver a intentarlo?");
                respuesta = MessageBox (NULL,buf,"ERROR.",MB_YESNO|MB_ICONEXCLAMATION);

                if (respuesta==IDYES) intento = 0;  // Se vuelve a intentar
                else salir=true;                    // Se sale
            }
        }
        while (salir==false);

Un saludo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.