Описание ошибки по номеру
Кто помнит функцию, подскажите пожалуйста
Есть INT ошибки от GetLastError нужно получить описание.
Кто помнит функцию, подскажите пожалуйста
Если не задумываясь, то вот - цитата из книги Джеффри Рихтера (правда прога для VC++ но с переводом в билдер думаю проблем не возникнет):
Собственно функция:
DWORD FormatMessage(
DWORD dwFlags,
LPCVOID pSource,
DWORD dwMessageId,
DWORD dwLanguageId,
PTSTR pszBuffer,
DWORD nSize,
va_list *Arguments);
И прога:
В поле Error можно ввести любой код ошибки. Когда Вы щелкнете кнопку Look Up, внизу, в прокручиваемом окне появится текст с описанием данной ошибки. Единственная интересная особенность программы заключается в том, как она обращается к функции FormatMessage. Я использую эту функцию так:
// получаем код ошибки
DWORD dwError = GetDlgItemInt(hwnd, IDC_ERRORCODE, NULL, FALSE);
HLOCAL hlocal = NULL; // буфер для строки с описанием ошибки
// получаем текстовое описание ошибки
BOOL fOk = FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER,
NULL, dwError, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),
(LPTSTR) &hlocal, 0, NULL);
if (hlocal != NULL) {
SetDlgItemText(hwnd, IDC_ERRORTEXT, (PCTSTR) LocalLock(hlocal));
LocalFree(hlocal);
} else {
SetDlgItemText(hwnd, IDC ERRORTEXT, TEXT("Error number not found."));
}
Первая строка считывает код ошибки из текстового поля. Далее я создаю экземпляр описателя (handle) блока памяти и инициализирую его значением NULL. Функция FormatMessage сама выделяет нужный блок памяти и возвращает нам его описатель.
Вызывая FormatMessage, я передаю флаг FORMAT_MESSAGE_FROM_SYSTEM. Он сообщает функции, что мне нужна строка, соответствующая коду ошибки, определенному в системе. Кроме того, я передаю флаг FORMAT_MESSAGE_ALLOCATE_BUFFER, чтобы функция выделила соответствующий блок памяти для хранения текста. Описатель этого блока будет возвращен в переменной hlocal. Третий параметр указывает код интересующей нас ошибки, а четвертый — язык, на котором мы хотим увидеть её описание.
Если выполнение FormatMessage заканчивается успешно, описание ошибки помещается в блок памяти, и я копирую его в прокручиваемое окно, расположенное в нижней части окна программы. А если вызов FormatMessage оказывается неудачным, я пытаюсь найти код сообщения в модуле NetMsg.dll, чтобы выяснить не связана ли ошибка с сетью. Используя описатель NetMsg.dll, я вновь вызываю FormatMessage. Дело в том, что у каждого DLL или EXE-модуля может быть собственный набор кодов ошибок, который включается в модуль с помощью Message Compiler (MC.exe). Как раз это и позволяет делать утилита Error Lookup через свое диалоговое окно Modules.
Если не задумываясь, то вот - цитата из книги Джеффри Рихтера (правда прога для VC++ но с переводом в билдер думаю проблем не возникнет):
А попроще-то никак? ... ну типа perror(...)
А попроще-то никак? ... ну типа perror(...)
Конечно perror(...), если прога для консольки. А тебе для чего нужно, наверно для GUI?..
Конечно perror(...), если прога для консольки. А тебе для чего нужно, наверно для GUI?..
думается, что тут нет никакой половой разницы, потому что мне нужно получить текст объяснения ошибки (строку то бишь) а я уже как-нибудь сам её выведу, куда надо...
думается, что тут нет никакой половой разницы, потому что мне нужно получить текст объяснения ошибки (строку то бишь) а я уже как-нибудь сам её выведу, куда надо...
DWORD dwRet = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER,
NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
(LPTSTR)&pv, 0, NULL);
MessageBox(NULL, (LPTSTR)pv, _T("Error"), MB_ICONHAND);
LocalFree(pv);
DWORD dwRet = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER,
NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
(LPTSTR)&pv, 0, NULL);
MessageBox(NULL, (LPTSTR)pv, _T("Error"), MB_ICONHAND);
LocalFree(pv);
а где можно найти список ошибок?
к примеру GetLastError возвращает 2, то что бы это значило?
а где можно найти список ошибок?
к примеру GetLastError возвращает 2, то что бы это значило?
The system cannot find the file specified. ERROR_FILE_NOT_FOUND
В helpe Visual C++ есть описание. (т.е. MSDN)
Но и в Buildere тоже есть что то: меню Help->Windows SDK и ключевое слово Error Codes
ErrorCodes (Win32 Programmer's Reference)
The system cannot find the file specified. ERROR_FILE_NOT_FOUND
В helpe Visual C++ есть описание. (т.е. MSDN)
Но и в Buildere тоже есть что то: меню Help->Windows SDK и ключевое слово Error Codes
Блин! ... спасибо за наставление на путь истинный! :))) сам дятел - ЕСТЬ ЖЕ MSDN!!
Спасибо ещё раз. Один тупой семи мудрецам покоя не даёт :))