class seh_exception : public std::exception {
public:
seh_exception(UINT se_code, PEXCEPTION_POINTERS se_info);
seh_exception(const seh_exception& old);
~seh_exception();
const char *what() const;
};
void translate_seh_exception(UINT se_code, PEXCEPTION_POINTERS se_info) {
throw seh_exception(se_code, se_info);
}
Теперь, что мне делать в конструкторе? Я не мог найти никакой информации о том, как долго будет существовать *se_info
, а это значит, что я, вероятно, не должен просто сохранять se_info
в частном поле для последующего использования - я должен его скопировать. А может и нет?Написание переводчика SEH
А что с what()
? Предполагаю ли я заклинать базовую строку по требованию? Опять же, выделение памяти в конструкторе кажется не очень хорошей идеей в этом случае.
Я в настоящее время реализован его хранение se_code
и se_info
без глубокого копирования и генерация отформатированного сообщения в конструкторе, и он работает, хотя я не знаю, если это на самом деле должен работать.
Я намерен использовать его в сценарии «catch, log whatused, terminate».
Я бы предположил, что вы пытаетесь что-то реализовать и посмотреть, где находится CATCH ... Pun неизбежно преднамеренно ... –
@MatsPetersson Я уже писал это: с мелким копированием и форматированием сообщений в конструкторе. Оно работает. Но это не означает, что он работает * надежно *. –
Я почти уверен, что 'что 'обычно решается с помощью переключателя, где каждый случай возвращает литеральную строку. Прошло немало времени с тех пор, как я работал над системами Windows, поэтому не могу помочь другим. Однако мой комментарий к моему комментарию состоял в том, что «Если вы показываете код», он дает гораздо более подробное представление о том, как он работает, и люди могут обнаружить ошибки/ошибки/проблемы. –