Сообщений 2    Оценка 77        Оценить  
Система Orphus

Как получить текст сообщения об ошибке?

Автор: Игорь Ткачёв

Функция GetLastError позволяет получать код последней ошибки. При этом, сам код ошибки может сказать Вам о многом, но иногда нужно ещё и сказать об этом пользователю, выдав вразумительное сообщение. И конечно же лучший вариант - получить текст сообщения об ошибке от самой операционной системы.

В Win32 API есть функция FormatMessage, которая позволяет получать текст ошибки по её коду. Ниже приведён текст функции, которая принимает в качестве параметров код ошибки, буфер в который будет записано сообщение и его длину. Функция возвращает указатель на исходный буфер.

#include <windows.h>
#include <tchar.h>

LPTSTR GetSystemMessage (DWORD dwError,LPTSTR lpszMessage,DWORD dwMsgLen)
{
    if (lpszMessage) {
        lpszMessage[0] = 0;
        if (dwError) {
            ::FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
                            NULL,
                            dwError,
                            MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
                            lpszMessage,dwMsgLen,NULL);
            size_t len = _tcslen(lpszMessage);
            while (len && (lpszMessage[len-1] == '\r' || 
                           lpszMessage[len-1] == '\n'))
                lpszMessage[--len] = 0;
        }
        return lpszMessage;
    }
    return "";
}

Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.
    Сообщений 2    Оценка 77        Оценить