This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Exception handling when mixing C++ et C shared library.


Hello,

I've got a shared library (gcdk) using libxml2 shared library and a program
using gcdk, and the program terminate with the following error:

terminate called after throwing an instance of 'std::bad_cast'
  what(): St8bad_cast


Here the schema of the different call happening

// libgcdk.so

void
libxml2_gcdk_error_handler_adapter( void* ctxt , xmlError* error )
{
    ...
    throw XmlException();
    ...
}


Document
LibXml2DOMParser::parseFile( const char* p_filename )
{
    ...
    try
    {
        xmlParseDocument( ctxt ); // Parse the xml file
                                  // and call the function above in case of
                                  // error
    }
    catch ( XmlException const& p_excp )
    {
        // This catch block is working well as it catch the XmlException
        // thrown by the function libxml2_gcdk_error_handler_adapter.
        throw std::bad_cast();
    }
}


The main program the call the LibXml2DOMParser::parseFile method.
The catch block inside this last method catch the XmlException but the catch
block inside the main program does not catch the std::bad_cast exception.

Do you known what happen ?

in the main function, I do something like this:

try
{
    parser->parseFile( "test-document.xml" );
}
catch ( XmlException const& p_excp )
{
    std::cerr << p_excp.what();
}
catch ( std::exception const& p_excp )
{
    std::cerr << p_excp.what();
}
catch ( ... )
{
    std::cerr << "Unknown exception.\n";
}

none of the catch block above is working ! And no matter the exception throw in
the catch block of the parseFile method above ! (the libxml2 library is
compiled with the -fexceptions compilation option).

g++ 3.4.6

Any hint please ?
Thanks a lot.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]