FormatMessage с заполнителями - PullRequest
0 голосов
/ 31 мая 2011
CString ErrorMessageFromErrorCode(DWORD errorCode)
{
    void* pMsgBuf = NULL;

    ::FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
        NULL,
        errorCode,
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        (LPTSTR) &pMsgBuf,
        0,
        NULL);

    CString result;

    if ( pMsgBuf )
    {
        result = (LPTSTR) pMsgBuf;
        LocalFree(pMsgBuf);
    }

    if ( result.Length() == 0 )
        result = _T("Unknown error");


    return result;
}

При вызове с параметром 2 эта функция возвращает «Система не может найти указанный файл». При вызове с 0xC1 возвращается «Неизвестная ошибка». Утилита Microsoft Error Lookup показывает это для 0xC1: «% 1 не является допустимым приложением Win32.». Поэтому, когда сообщение об ошибке содержит заполнитель, моя функция не работает. Есть ли общий способ получить тот же результат, что и Поиск ошибок, не зная ничего о коде ошибки?

1 Ответ

3 голосов
/ 31 мая 2011

Попробуйте добавить FORMAT_MESSAGE_IGNORE_INSERTS к флагам.

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