Почему MessageBox молча терпит неудачу? - PullRequest
2 голосов
/ 27 мая 2010

Кто-нибудь знает, как MessageBox (...) мог молча сбоить?

MessageBox(g_hMainhWnd, buffer, "Oops!", MB_OK | MB_ICONERROR);

ShellExecute(0, "open", "http://intranet/crash_handler.php", NULL, "", SW_SHOWNORMAL);

Для небольшого контекста этот код вызывается внутри нашего собственного обработчика исключений, который был зарегистрирован с помощью SetUnhandledExceptionFilter ()

В большинстве случаев я вижу окно сообщения, а затем он запускает веб-браузер.

Однако у меня есть исполняемый файл, который, насколько мне известно, использует этот точный код, и он успешно запускает веб-браузер, но сначала я не вижу окно сообщения.

Спасибо

Тим


Трещины. Я попытался сознательно передать мусорный HWND, и окно сообщения не появилось.

Спасибо, Брайан!

Ответы [ 2 ]

5 голосов
/ 27 мая 2010

Просто идея, но, возможно, g_hMainhWnd недействительно? Посмотрите, работает ли это, когда вы вводите NULL для первого параметра.

Я бы предложил позвонить GetLastError после вызова и записать вывод в файл. Таким образом, вы можете увидеть, что Windows считает ошибкой. В документации MSDN MessageBox указано, что для этого API установлено GetLastError, а в случае сбоя возвращается ноль.

0 голосов
/ 27 мая 2010

Это распространенная проблема в Windows Mobile, когда ошибка вызывает отключение (я предполагаю, что происходит в вашем случае, учитывая URL-адрес, на который вы собираетесь). Даже когда вы перехватываете необработанное исключение, вы можете надежно выполнить несколько операторов до того, как приложение затем закроется, но MessageBoxes могут отображаться или не отображаться. Они почти всегда отображаются при запуске приложения в режиме отладки через Visual Studio, но они почти никогда не появляются, когда приложение запускается как скомпилированный EXE.

Странно, если в этой ситуации дважды вызывать MessageBox, вызов second обычно показывает поле (даже в EXE).

Я не знаю, существует ли такая же проблема с обычной Windows, но похоже, что вы описываете точно такую ​​же ситуацию. Здесь полная догадка, но вполне возможно, что ОС Windows знает, что приложение, запрашивающее окно сообщения, находится на грани смерти, и разумно игнорирует запрос (в старые времена умирающие приложения, которые часто использовались для создания заграждения «помогите мне» Я умираю "окна сообщений).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...