Я использую следующий код консольного приложения MSVC++ (работающий в Windows 8.1, Release, Win32), чтобы попытаться вернуть мне исключение верхнего уровня:
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
using namespace std;
LONG WINAPI UnhandledExceptionFilter(PEXCEPTION_POINTERS exception)
{
printf("Got an unhandled exception.");
return EXCEPTION_CONTINUE_SEARCH;
}
int _tmain(int argc, _TCHAR* argv[])
{
SetUnhandledExceptionFilter(UnhandledExceptionFilter);
int a = 0;
int b = 0;
int c = a / b;
cin.get();
return 0;
}
Мой UnhandledExceptionFilter
на самом деле, похоже, никогда не вызывается при исключении деления на ноль, которое выдается в этом примере, иначе я ожидал бы появления сообщения журнала «Получено необработанное исключение». Это почему?
windows.h
. Мое решение состояло в том, чтобы немного переименовать мой класс, чтобы он больше не сталкивался с именами классовwindows.h
. Из сообщений компилятора не всегда было очевидно, что содержимоеwindows.h
использовалось первым. - person CPlusPlus OOA and D   schedule 19.03.2014UnhandledExceptionFilter
уже определено вkernel32.lib
при связывании. - person zhenguoli   schedule 12.09.2019