/ / manejo de excepciones de expat - c ++, expat-parser

manejo de excepciones de expatriados - c ++, parser expat

Había estado tratando de averiguar por qué elmi aplicación no detecta excepciones lanzadas desde el gestor de eventos StartElement que hace uso del analizador de expat (en C). La aplicación simplemente termina diciendo que no puede encontrar bloques catch, aunque tengo todos los bloques catch en su lugar. Es solo que, dado que se están generando excepciones de mis propios controladores de eventos, la API XML_Parse de expatriados no puede pasarla a mi código donde tengo todos los bloques de captura. Uno de los usuarios de stackoverflow con el nombre "Michael Anderson" sugirió reconstruir la liberación de expatriados con las banderas de gcc necesarias para que las exenciones de manejo de la liberación de expatriados ¿Alguien puede decirme qué banderas son esas? O sugiera una mejor salida para manejar los errores en los controladores de eventos como el elemento de inicio, el elemento de endellement, etc.

De alguna manera quiero que la API XML_Parse devuelva 0 si encuentro alguna excepción en mis controladores de eventos registrados. Por favor ayuda. Gracias por adelantado.

Aquí está el código:

try
{
if( ! XML_Parse(.....) )
{
throw exception;
}
}
catch(...)
{
}

En el escenario de trabajo, si XML_Parse se encuentraun archivo xml con formato incorrecto, devuelve rápidamente cero, y me meto en la excepción de bloqueo y lanzamiento, y está bien capturado. Pero en el caso problemático, las excepciones se están generando desde los controladores de eventos, pero mi aplicación vuelca el núcleo, y la pila del núcleo dice que no puede detectar la captura y finalmente llamar a std :: terminar y abortar. Ahora, ¿cómo hago que XML_Parse devuelva cero cuando deseo lanzar una excepción definida por el usuario desde los controladores de eventos?

Respuestas

0 para la respuesta № 1

Según expat.h, debe invocar XML_StopParser (analizador, 0) cuando encuentre un error en su controlador que justifique abortar el análisis.

XML_Parse devolverá XML_FALSE. En ese momento puede invocar el manejo de errores específico de su aplicación.