Исключение в WindowProc

Можно ли поймать ошибку внутри WindowProc Перезвоните? try / catch не работает Похоже __try __except а также аппаратное исключение (AV, например) тоже не работает.


Обновить:

Я понял, что на самом деле это можно бросить исключение в WindowProc перезвонить и поймать его catch блок снаружи WindowProc, Проверено и работает на Windows XP x86, Я нашел заданный вопрос 64-битные исключения в WndProc молча терпят неудачу Проблема, кажется, существует только на Windows 7 x64 (и в соответствии с этим вопросом на других версиях Windows x64 тоже).

Так что вопрос, можно ли как-то бросить исключение в WindowProc и поймать это с catch блок снаружи WindowProc? Я установил исправление Microsoft, установил DisableUserModeCallbackFilter 1 в реестре, и лучшее, что я получаю, FATAL_USER_CALLBACK_EXCEPTION, не мое исключение.

5

Решение

Документация MSDN для WindowProc содержит подробную информацию об исключениях, генерируемых / распространяемых из WindowProc. Кажется, что исключения распространяются только в 32-разрядных версиях Windows.

Однако ваш оригинальный вопрос отличается от вопроса в вашем обновлении. Первый был о привлекательный исключения в WindowProc, и это всегда будет работать нормально. Второй о бросание исключения из WindowProc.

Я не уверен насчет полезности / необходимости второго. Оконная процедура обычно вызывается в результате:

  1. Вызов DispatchMessage в цикле сообщений. В этом случае нет необходимости генерировать исключение, потому что это просто приведет к закрытию приложения. Если вы столкнулись с ошибкой, которая должна привести к закрытию приложения, просто вызовите PostQuitMessage (0)
  2. Вызов SendMessage. В этом случае вы на самом деле не хотите генерировать исключения, потому что оконная процедура будет выполняться в потоке пользовательского интерфейса, и если вызывающий поток отличается от потока пользовательского интерфейса, вызывающий поток все равно не получит исключение
  3. Вызов оконной процедуры напрямую. Исключения будут работать нормально в этом случае.
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]