2010-05-27 7 views
2

MessageBox (...)가 어떻게 자동으로 실패 할 수 있는지 아는 사람 있습니까? 약간의 상황에 대한 MessageBox가 자동으로 실패하는 이유는 무엇입니까?

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

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

,이 코드에 SetUnhandledExceptionFilter()

는 대부분의 시간, 나는 메시지 상자를 표시 한 다음 웹을 실행에 등록 된 우리 자신의 예외 핸들러 내에서 호출됩니다 브라우저.

그러나이 정확한 코드를 사용하는 것으로 알고 웹 브라우저를 성공적으로 시작하지만 실제로 메시지 상자가 표시되지 않는 EXE가 있습니다.

감사


는 금이. 고의로 HWND를 쓰레기통에 넣으려고했는데 메시지 상자가 나타나지 않았습니다.

감사합니다. Brian!

+0

실패하면 실제로 무엇이 발생합니까? 프로세스가 종료됩니까? MessageBox가 0을 반환합니까? 원인을 알아 내기 위해 GetLastError()를 사용할 수 있습니까? –

+0

불행히도 exe를 빌드 한 코드에 더 이상 액세스 할 수 없으므로 정확하게 추적 할 수는 없습니다. 생각해 줘서 고마워. –

답변

5

그냥 생각하지만 어쩌면 g_hMainhWnd은 (는) 잘못된 것일까 요? 첫 번째 매개 변수에 NULL을 입력하면 작동하는지 확인하십시오.

호출 후 GetLastError으로 전화를 걸고 출력을 파일에 씁니다. 그렇게하면 Windows에서 오류라고 생각하는 것을 볼 수 있습니다. MSDN MessageBox 설명서에이 API에 대해 GetLastError이 설정되고 실패하면 0이 반환됩니다.

+0

네, HWND가 유효하지 않다고 생각합니다 - 감사합니다! –

0

이것은 Windows Mobile에서 오류가 발생하면 종료 될 때마다 발생하는 일반적인 문제입니다 (사용자의 경우 주어진 상황에서 일어난 일입니다). 처리되지 않은 예외를 발견하더라도 응용 프로그램이 닫히기 전에 여러 명령문을 안정적으로 실행할 수 있지만 MessageBox는 표시되거나 표시되지 않을 수 있습니다. Visual Studio를 통해 디버그로 앱을 실행할 때 거의 항상 표시되지만 앱이 컴파일 된 EXE로 실행될 때는 거의 표시되지 않습니다.

이상한 상황에서 MessageBox를 두 번 호출하면 두 번째 호출에 대개 EXE에 상자가 표시됩니다.

동일한 문제가 일반 Windows에서 발생하는지는 확실치 않지만 정확한 상황을 설명하는 것처럼 들립니다. 여기에서 완전히 추측 할 수는 있지만 Windows OS가 메시지 상자를 요청하는 응용 프로그램이 죽음의 위협에 빠져 있음을 인식하고 가능하면 요청을 무시합니다. (예전에는 죽어가는 응용 프로그램이 종종 "도와 줘요" , 나는 죽어 가고있다 ").

관련 문제