У меня есть DLL, которая бросает исключение, как так:Почему это исключение не попадает в DLL?
throw POMException(err, drvErr, errmsg);
Вызывающий код находится в отдельной программе, и есть попытка, поймать блок, как так:
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.
Файлы cpp DLL скомпилированы со следующими (соответствующими) флагами: /X /GR /Ob1 /Zi /GX /Od /MDd /LD
. Другие исключения в вызывающей программе обрабатываются правильно.
Может ли кто-нибудь объяснить причины, по которым это исключение не распространяется на вызывающую программу?
Edit:
библиотека DLL была ранее скомпилирован с возможным изменением среды сборки и кода, которые не доступны для меня. Ранее скомпилированная библиотека корректно передает исключения.
Я компиляция клиентской программы, используя тот же компилятор, используя в основном те же переключатели: -Od -W3 -Z7 -MDd -GX -GR -Zm800
(без /X
или /Ob1
и /Z7
вместо /Zi
).
Элементы C++ не поддерживаются DLL. –
Возможно, это зависит от того, что 'POMException' ... – AJG85
Где находится/EH? Необходимые. –