| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Mie 30 Jul, 2003 12:07 pm Asunto: Me salta excepción con CppWebBrowser |
|
|
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 |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
|
| Volver arriba |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Sab 16 Ago, 2003 5:23 pm Asunto: |
|
|
Nadie se anime a darme alguna sugerencia de posible solución ?
Perdonadme si os doy un poco la paliza. |
|
| Volver arriba |
|
 |
Shed Cdt

Registrado: 05 Dic 2005Mensajes: 3
|
Publicado: Lun 05 Dic, 2005 6:21 pm Asunto: Aqui dejo una modificacion, pasandole el argumento |
|
|
| 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 |
|
 |
kalux Master


Registrado: 21 Nov 2003Mensajes: 313Ubicación: Alicante - España
|
Publicado: Lun 05 Dic, 2005 7:56 pm Asunto: |
|
|
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 |
|
 |
|