Находясь в __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 или его наслендиком...