Как достать std::exception из PEXCEPTION_POINTERS
От: Caracrist https://1pwd.org/
Дата: 15.09.22 12:02
Оценка:
Находясь в __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 или его наслендиком...
~~~~~
~lol~~
~~~ Single Password Solution
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.