У меня есть DLL, которая выдает исключение следующим образом:
throw POMException(err, drvErr, errmsg);
Код вызова находится в отдельной программе и имеет блок try, catch следующим образом:
try
{
// function in separate DLL
}
catch (TXNPDO_Exception& e)
{
SR_PERFLOG_MSG(SR_PERFMASK_SELECT, "ERROR selectInStages");
TXNDBO_THROW(e);
}
Где TXNPDO_Exception
определено во включенном файле:
#define TXNPDO_Exception POMException
При запуске этого в отладчике говорится, что POMException
не обработан. Я даже добавил предложение catch(...)
, но оно до сих пор не обработано.
Я подозреваю, что это как-то связано с параметрами компиляции Visual C ++, поскольку рассматриваемая библиотека DLL является устаревшей библиотекой, которая компилируется отдельно от вызывающей ее программы. Я использую Visual Studio 2003.
Файлы DLL cpp компилируются со следующими (соответствующими) флагами: /X /GR /Ob1 /Zi /GX /Od /MDd /LD
. Другие исключения в вызывающей программе обрабатываются правильно.
Кто-нибудь может указать причины, по которым это исключение не распространяется на вызывающую программу?
Edit:
Библиотека DLL была ранее скомпилирована с возможной средой сборки и изменениями кода, которые мне недоступны. Ранее скомпилированная библиотека правильно распространяет исключения.
Я компилирую клиентскую программу, используя тот же компилятор, используя в основном те же ключи: -Od -W3 -Z7 -MDd -GX -GR -Zm800
(без /X
или /Ob1
и /Z7
вместо /Zi
).