0

何らかの理由で、GetMessage() ループが終了した直後に「無効なウィンドウ ハンドル」エラーが発生しますが、HWND を渡していないのに、どうしてこのエラーが発生するのでしょうか? :s

MSG Message;
while(GetMessage(&Message, NULL, 0, 0) != 0)
{
    TranslateMessage(&Message);
    DispatchMessage(&Message);
}
ShowError();

このアプリ以外で使用していて、このエラーが発生しないため、ShowError に問題はありません...

void ShowError()
{
    DWORD ErrorCode = GetLastError();
    if(ErrorCode == ERROR_SUCCESS) return;

    LPTSTR lpszBuffer = NULL;
    FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, ErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpszBuffer, 0, NULL);

    MessageBox(NULL, lpszBuffer, NULL, MB_OK | MB_ICONERROR);
    LocalFree(lpszBuffer);
}
4

2 に答える 2

3

Windows 関数がエラー コードを返した場合にのみ、GetLastError() を呼び出す必要があります。!= 0 の GetMessage() の戻り値をテストするだけです。これは 0 である可能性があり、プログラムが WM_QUIT で正常に停止したことを示します。または、実際のエラーである -1 の可能性もあります。

于 2012-01-05T22:58:44.147 に答える