Находясь в __except мне нужно понять если бросили именно std::exception, можно ли это сделать нагло кастанув pExceptionObject в std::exception* и потом сделать dynamic_cast в тот же тип?
Типа такого:
bool ItIsAnStdException(std::exception * pStdEx)
{
return (dynamic_cast<std::exception *>(pStdEx) != 0);
}
TryExtractSTDException(int code, PEXCEPTION_POINTERS exceptionPointers)
{
if (code == 0xE06D7363) // created with c++ throw
{
EHExceptionRecord pThisException = (EHExceptionRecord *)exceptionPointers->ExceptionRecord->ExceptionInformation[6];
std::exception * pStdEx = (std::exception *)pThisException ->params.pExceptionObject;
if (ItIsAnStdException(pStdEx))
{
DebugOutput(pStdEx->what());
}
}
// more logic
}
__try
{
// throw std::exception();
// throw 1;
// throw std::invalid_argument();
// ((string*)0)->clear();
}
__except(TryExtractSTDException(GetExceptionCode(), GetExceptionInformation()))
{
// some logic
}
Фактически, у меня в руках void* и мне нужно понять является ли он типом std::exception или его наслендиком...
Здравствуйте, Caracrist, Вы писали:
C>Находясь в __except мне нужно понять если бросили именно std::exception, можно ли это сделать нагло кастанув pExceptionObject в std::exception* и потом сделать dynamic_cast в тот же тип?
C>Фактически, у меня в руках void* и мне нужно понять является ли он типом std::exception или его наслендиком...
Неа, скорее всего без шансов.
SEH и С++ исключения — два различных механизма.
Ты можешь включить подходящую опцию, чтобы в catch(...) ловить структурные исключения, но уже без детальной информации. Подробнее
тут
Либо использовать вложенную функцию, где ловить std::exception&, а внешняя функция будет ловить структурные исключения.
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Неа, скорее всего без шансов.
SVZ>SEH и С++ исключения — два различных механизма.
Как бы да, но в MSVC не совсем
Ссылки на реализацию тут уже приложили.