Нет, вы не можете выбросить исключения C ++ из своей ловушки.
Это может работать некоторое время - но в целом - когда вызывается ловушка, CRT находится в неопределенном состоянии и больше не может генерировать или обрабатывать исключения.Создание исключения, когда CRT находится в затруднительном положении, аналогично созданию исключения из деструктора объекта, который был вызван во время разматывания стека из-за исключения.Кроме того, глубина CRT не является подходящим местом для выброса исключений C ++, это может привести к тому, что среда выполнения окажется в плохом состоянии - если это еще не было!
Вам следует сделать следующее:
int no_dialog_box_but_act_as_if_it_had_appeared_and_abort_was_clicked (int /* nRptType */,
char *szMsg,
int * /* retVal */)
{
fprintf (stderr, "CRT: %s\n", szMsg);
/* raise abort signal */
raise (SIGABRT);
/* We usually won't get here, but it's possible that
SIGABRT was ignored. So exit the program anyway. */
_exit (3);
}