Внешний консультант написал нам программу на C ++, которая читает и анализирует некоторые XML-файлы. Он использовал более старую версию Xerces, и мне пришлось перекомпилировать ее с более новой версией Xerces, и теперь я получаю ошибку во время выполнения.
Вот фрагмент кода, который вызывает ошибку
try
{
// Instantiate the Xerces DOM parser
parser = new SAXParser();
if ( parser == NULL ) {
fverbose ( AFCCB2MMLAdapter::logFile, "ERROR: Could not create Xerces SAX Parser\n" );
return NULL;
}
}
catch (const SAXParseException& toCatch) {
char* message = XMLString::transcode(toCatch.getMessage());
fverbose ( AFCCB2MMLAdapter::logFile, message );
return NULL;
}
catch (...)
{
fverbose ( AFCCB2MMLAdapter::logFile, "Error in SAXParser.\n" );
return NULL;
}
В проекте C ++ я изменил зависимость Linker, чтобы она соответствовала новой версии:
Xerces-c_3.lib
И я поместил DLL-файл xerces в ту же папку, что и мой EXE-файл, но имя DLL-файла называется не так, как в LIB:
Xerces-c_3_1.dll
На данный момент, я немного озадачен. Я не могу понять, что именно является сообщением об ошибке, потому что блок catch (…), кажется, перехватывает ошибку, но я недостаточно хорошо знаю C ++, чтобы понять, как получить ошибку.
Есть идеи?
Спасибо,
Kevin
Я понял эту проблему. Этот код был перенесен из более старой версии xerces, и более старая версия не требовала вызова подпрограммы инициализации. Новая версия требует этот вызов, поэтому я добавил его, и теперь все работает!
Спасибо,
Kevin