Создать диагностическое сообщение для кодов HRESULT? - PullRequest
0 голосов
/ 04 декабря 2009

Я хотел бы иметь возможность сделать эквивалент FormatMessage - генерировать текстовое сообщение для отладки и даже сборок во время выполнения, которые могут сообщать о некоторых общих HRESULT, или даже выплевывать такие вещи, как серьезность, какое средство было и, возможно, описание кода ошибки.

Я нашел эту простую функцию , но она слишком проста и в большинстве случаев, кажется, генерирует "неизвестную ошибку". Но пока я не нашел ничего более перспективного.

Я могу сделать что-то вроде следующего:

CComPtr<IErrorInfo> iei;
if (S_OK == GetErrorInfo(0, &iei) && iei)
{
    // get the error description from the IErrorInfo 
    BSTR bstr = NULL;
    if (SUCCEEDED(iei->GetDescription(&bstr)))
    {
        // append the description to our label
        Append(bstr);

        // done with BSTR, do manual cleanup
        SysFreeString(bstr);
    }
}
else if (HRESULT_FACILITY(hr) == FACILITY_WIN32)
{
    // append the description to our label
    Append(CErrorMessage(HRESULT_CODE(hr)).c_str());
}

Однако мне интересно, добиваюсь ли я чего-то большего, чем _com_error.

Кто-нибудь знает разумно реализованную возможность генерирования вывода журнала ошибок для HRESULT?

Ответы [ 3 ]

3 голосов
/ 04 декабря 2009

Если вы используете WIN32 напрямую, вызов FormatMessage () должен помочь вам.

2 голосов
/ 04 декабря 2009

Вы используете Boost? Библиотека boost :: system автоматически ищет коды результатов HRESULT и Win32 API.

1 голос
/ 04 декабря 2009

Как вы размышляете, _com_error::ErrorMessage() должны добиться цели.

Если вы получаете «Неизвестную ошибку», то полученные вами HRESULT, вероятно, не известны Windows. Для этих сообщений попробуйте вывести значение HRESULT и , чтобы выяснить, действительно ли они соответствуют кодам ошибок win32 .

Есть некоторые ком-макросы, доступные , чтобы помочь вам разделить биты HRESULT.

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