Коды ошибок getlasterror c - IT Новости из мира ПК
Remkomplekty.ru

IT Новости из мира ПК
3 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Коды ошибок getlasterror c

Коды ошибок getlasterror c

Не могу найти не в Source, не в Help. Подскажите, где посмотреть?


Игорь Шевченко ( 2003-01-16 12:02 ) [1]

Platform SDKIncludewinerror.h
Или в любом сишном компиляторе под win32


Smithson ( 2003-01-16 12:03 ) [2]

Немае. Пишу же — Delphi 5


Игорь Шевченко ( 2003-01-16 12:06 ) [3]

Блин, сбил ты меня с толку! 🙂
SourceRtlWinwindows.pas


neXt ( 2003-01-16 12:06 ) [4]

MSDN/Platform SDK Documentation/Win32 API/Reference/Compatibility with the Windows API/Win32 Error Codes

ЗЫ: только у меня старая MSDN может адрес щас другой


neXt ( 2003-01-16 12:09 ) [5]


> Игорь Шевченко © (16.01.03 12:06)
> Блин, сбил ты меня с толку! 🙂
> SourceRtlWinwindows.pas

Там function GetLastError: DWORD; stdcall;, а просят вроде коды ошибок.


Smithson ( 2003-01-16 12:09 ) [6]

MSDN у меня тоже нету — Рихтером обхожусь.
Слушайт, а можешь поглядишь — код ошибкии 997 (десятичный)?


neXt ( 2003-01-16 12:11 ) [7]

997 Overlapped I/O operation is in progress. ERROR_IO_PENDING


Smithson ( 2003-01-16 12:12 ) [8]

Нет, коды там тоже есть. Я вроде нашел, но ни черта не понял. У меня
рушится сокетный ввод-вывод с кодом 997. Что это может быть?


neXt ( 2003-01-16 12:13 ) [9]

> Игорь Шевченко © (16.01.03 12:06)
сори, есть там коды только до 4000
> Smithson © (16.01.03 12:09)
и 997 тоже есть в SourceRtlWinwindows.pas
< Overlapped I/O operation is in progress. >
ERROR_IO_PENDING = 997; < dderror >
<$EXTERNALSYM ERROR_IO_PENDING>


Mystic ( 2003-01-16 12:17 ) [10]

Если нужно по коду ошибки получить описание, может помочь функция FormatMessage с флагом FORMAT_MESSAGE_FROM_SYSTEM.


Anatoly Podgoretsky ( 2003-01-16 12:24 ) [11]

Коды ошибок есть в хелпе, так и называются error codes


Digitman ( 2003-01-16 12:27 ) [12]

см. Win32Check(), RaiseLastWin32Error()

Checks the return value of a Windows API call and raises an appropriate exception when it indicates failure.

exception handling routines

function Win32Check(RetVal: BOOL): BOOL;

Call Win32Check with the return value of a Windows API call that returns a Boolean to indicate success or failure. If the Windows API returns False (indicating failure), Win32Check calls RaiseLastWin32Error to raise an exception. If the Windows function returns True, Win32Check returns True.
.

Call RaiseLastWin32Error to raise an EWin32Error exception for the last Windows API call that failed. RaiseLastWin32Error retrieves the code for the last occurring Win32 error, if any. If Windows returns a previously occurring error code, RaiseLastWin32Error raises an EWin32Error exception with the error code and message associated with that error.


Anatoly Podgoretsky ( 2003-01-16 12:33 ) [13]

Если нужны не коды, а тексты ошибок, то надо использовать FormatMessage


Anatoly Podgoretsky ( 2003-01-16 12:39 ) [14]

Если нет противопоказания к использованию VCL, то наиболее удобно SysErrorMessage(GetLastError)


Smithson ( 2003-01-16 12:46 ) [15]

Спасибо, я его поборол.
Но у меня видимо перекрыт хелп — error codes возращает описания, начиная с 1000 кода.


Anatoly Podgoretsky ( 2003-01-16 12:58 ) [16]

Smithson © (16.01.03 12:46)
Ты видимо вообще в другом хелпе смотришь, прямо из хелпа
997L ERROR_IO_PENDING


Демонов Е.В. ( 2003-01-16 16:11 ) [17]

SysErrorMessage(997)=
Протекает наложенное событие ввода/вывода

Список кодов ошибок GetLastError() для каждой функции winapi

Есть ли список, который предоставляет коды ошибок, которые возвращаются данной функцией winapi через GetLastError() ? существует ли какой-либо официальный или неофициальный ресурс, который предоставляет такую документацию ?

например, страницы документации по функциям winsock на MSDN предоставляют таблицу возможных кодов WSAGetLastError(), в то время как другие функции winapi не имеют такого списка для каждой возможной ошибки данной функции, и это точная проблема, рассматриваемая в этом вопросе, я прошу аналогичную документацию для каждой функции winapi.

То, о чем я не прошу:

  • Список кодов ошибок winapi
  • Рекомендации по реализации обработки ошибок или некоторой библиотеки, которая занимается обработкой ошибок
  • советы по использованию FormatMessage() и подобных

EDIT: я знаю об этом вопросе, он имеет дело с одной конкретной функцией (CreateFile), которая кажется исключением, потому что сторонние файловые системы могут предоставлять свои собственные коды ошибок, даже если большинство функций подпадают под этот случай, все равно должны быть наиболее распространенные / стандартные коды ошибок

2 Ответа

Такого списка нет. Фактически, не может быть одного, потому что есть API вызовов, которые даже не контролируют весь набор кодов ошибок, которые они могут возвращать (рассмотрим , например, EnumWindows, где пользовательский код задает код ошибки).

Некоторые вызовы API предоставляют частичный список кодов ошибок, которые они могут возвращать. В этих случаях он является частью документированного контракта, и ваш код может быть записан для учета этих кодов ошибок. Имейте в виду, что эти списки обычно никогда не бывают полными, поэтому ваш код должен быть готов к работе с другими кодами ошибок.

Читать еще:  Система защиты от ошибок

Короче говоря, обработка ошибок должна быть реализована на основе case-by-case. Существуют общие закономерности,но нет единой универсальной реализации.

Такого списка нет. Даже если в документации для конкретной функции перечислены коды ошибок, которые могут быть возвращены, этот список не является исчерпывающим. Вам всегда нужно учитывать вероятность возврата других кодов.

Похожие вопросы:

Я пишу DLL, который программа java использует для вызова WinAPI различными способами. Я хочу отбросить правильные исключения обратно в java, но мне нужна красиво оформленная ошибка WinAPI, а не.

Я пишу на C++. Большинство моих код исключения, когда не. Иногда мне приходится иметь дело с окном API, которое ориентировано на C и не бросает. Итак, каждый раз, когда я вызываю функцию WINAPI, я.

Я собираюсь использовать этот дескриптор для функции WriteFile, но GetLastError дает мне #5 . Я знаю, что это Доступ запрещен, но я не знаю, что делать. Я проверяю это на некоторое время, и я видел.

Я много чего проверял. Но я не нашел никаких недостатков этих 2! Но посмотрите на принятый ответ. Я читал здесь , что вызов GetLastError в управляемом коде небезопасен, потому что фреймворк может.

В моей оболочке Windows API ATL dll я выставил GetLastError на COM для обработки ошибок Windows API. Он реализуется следующим образом: STDMETHODIMP CWinAPI::WinAPI_GetLastError(int *Result) <.

В настоящее время я изучаю C++ в связи с WinAPI. Я изо всех сил пытаюсь придумать значимую стратегию обработки ошибок для функций WinAPI. PROBLEM : Большинство функций WinAPI могут возвращать 0 в.

Есть ли место, где я могу найти полный список кодов ошибок Facebook? В статистике моего приложения у меня есть несколько ошибок 1340004: Method: dialog:oauth:touch Error Code: 1340004 Failures: 436.

Я использую derby DB. Я пытаюсь выключить базу данных. Я получаю: —— SQLException —— SQL State: XJ004 Error Code: 40000 Message: Database ‘ ‘ not found. Я мог бы найти SQL.

Есть ли полный список кодов ошибок, которые может создать netsh? Я не очень часто появляюсь в google, и документация для netsh, которую я нашел , похоже, включает только информацию об.

C++11 ввел заголовок , содержащий общую систему для обработки кодов ошибок. std::error_code -это кортеж, содержащий int , код ошибки и ссылку на std::error_category , которая.

категории и стандартные / системные коды ошибок

C++11 вводит заголовок, содержащий общую систему для обработки кодов ошибок. Ан std::error_code — кортеж, содержащий элемент int , код ошибки и ссылка на std::error_category , который определяет домен ошибки и обработку кода ошибки. Стандартная библиотека поставляется с четырьмя категориями: std::generic_category , std::system_category , std::future_category и std::iostream_category .

есть конфликты по какой категории использовать, как здесь на SO, так и на ссылочных сайтах C++, при создании std::error_code s / метание std::system_error С errno и коды ошибок WinAPI:

  • errno С std::generic_category : так что ответ, инструмент LLVM-совершает, cplusplus.com
  • errno С std::system_category : так что ответ, cppreference.com
  • GetLastError() С std::generic_category : так что ответ
  • GetLastError() С std::system_category : так что ответ, так комментарий

, errno и GetLastError() не может использовать ту же категорию, иначе некоторые коды ошибок будут неоднозначными. Код ошибки 33 является одним из примеров, так как это оба EDOM и ERROR_LOCK_VIOLATION .

есть даже некоторые места, пропагандирующие пользовательскую категорию для WinAPI, но я не могу найти никаких ссылок на это на данный момент. Эта альтернатива была бы особенно болезненной.

какую категорию следует использовать с errno , и что следует использовать с GetLastError() , так что

это unambinguous и соответствующий код базовой ошибки?

2 ответов

в стандарте C++:

system_category

некоторые функции в стандартной библиотеке C ++ сообщают об ошибках через std::error_code объект (19.5.2.1). Что объект category() участник должен вернуть std::system_category() для ошибок, происходящих из операционной системы, или ссылка на реализацию, определенную error_category объект для ошибок, возникающих в другом месте. Этот реализация определяет возможные значения value() для каждого из них ошибка > категории. [ Пример: для операционных систем, основанных на POSIX, реализации рекомендуется определить std::system_category() значения, идентичные POSIX errno значения, с дополнительными значения, определенные в документации операционной системы. Реализации для операционных систем, не основанных на POSIX рекомендуется определить значения, идентичные операционным системные ценности. Для ошибок, которые не происходят из операционная система, реализация может обеспечить перечисления на связанные значения.

это не так ясно:

что должно случиться с errno значения в Windows?

это errno из вызова POSIX «происходящего из операционной системы» или это должно быть ограничено не POSIX звонки?

generic_category

std::errc является перечислением с теми же значениями, что и C / POSIX EFOOBAR — код ошибки;

стоимость каждого enum errc константа будет этим же как значение макрос показано выше синопсис. Будет ли реализация выставляет макросы не указаны.

make_error_code(std::errc) выдает erro_code используя generic_category

error_code make_error_code(errc e) noexcept;

возвращает: error_code(static_cast (e), generic_category()) .

это означает, что код ошибки POSIX может использоваться с generic_category . Значения non POSIX могут работать неправильно с generic_catgeory . На практике они, похоже, поддерживаются реализациями, которые я использую.

Читать еще:  Ошибка 0х80004005 при распаковке архива

В Boost

сама система Boost

документация Boost довольно лаконична об этом особенность:

исходное предложение рассматривало категории ошибок как двоичный выбор между errno (т. е. POSIX-style) и родной операционной системой код ошибки.

кроме того, вы можете найти устаревшую декларацию, такую как:

чтобы создать error_code после ошибки API: error_code( errno, system_category() )

чтобы создать error_code после ошибки API: error_code( ::GetLastError(), system_category() )

чтобы создать error_code после ошибки API: error_code (errno, system_category ())

для Windows Boost использует system_category для non errno ошибки:

In ASIO

мы находим такой код в ASIO:

найти у нас errno as system_category in Код POSIX:

файловой системы

найти у нас errno С generic_category в коде POSIX:

в GNU libstdc++

файловой системы

найти у нас errno С generic_category :

и без использования system_category .

использование libstdc++

на практике, кажется, вы можете использовать generic_category для не-POSIX errno С libstdc++:

найти у нас errno С system_category :

но без использования generic_category .

вывод

я не нахожу здесь никакого последовательного шаблона, но, по-видимому:

вы должны использовать system_category при использовании ошибки Windows в Windows;

вы можете безопасно использовать generic_category для значений POSIX errno ;

вы не должны быть в состоянии использовать std::generic_category для не-POSIX валов errno (это может не работать);

если вы не хотите, чтобы проверить, если ваш errno значение POSIX одно: в системах на основе POSIX вы, как ожидается, сможете использовать system_error с errno (строго говоря, поддержка этого не является обязательной, только поощряется). в системах на базе POSIX вы можете использовать system_error с errno .

я должен признать, что немного удивлен путаницей в отношении , учитывая, что Крис суммировал точно, как это работает в http://blog.think-async.com/2010/04/system-error-support-in-c0x-part-1.html и я лично считаю, что стандартный текст C++ выше совершенно ясен. Но резюмировать очень лаконично:—15—>

если на POSIX:

generic_category => POSIX стандартное пространство errno

system_category => локальный POSIX errno пространство (обычно расширяет POSIX с проприетарными кодами errno). Использовать strerror() чтобы развернуть коды в строковые описания, возвращаемые message() .

на практике в POSIX обе реализации одинаковы внизу и отображают собственное пространство errno.

если на Windows:

generic_category => POSIX стандартное пространство errno, которое возвращается различными функциями эмуляции POSIX в MSVCRT, как fopen() etc

system_category => Для Win32 GetLastError() пространство. Использовать FormatMessage() чтобы развернуть коды в строковые описания, возвращаемые message() .

как использовать переносимо

другие мысли:

некоторые комментаторы сказали, что плохо спроектирован и не должен использоваться. Это просто не так, это довольно оптимально, учитывая идиоматическую практику C++ 03 времени ее разработки, она генерирует очень плотную фиксированную латентность высокого качества код на всех основных STLs, кроме Dinkumware. Это пользователь, расширяемый к любой произвольной системе кода ошибки, и стандартизирует унификацию в единую систему разрозненной обработки ошибок сторонних библиотек.

это правда, что сегодня это выглядело бы совсем иначе, если бы глобальные переменные constexpr были доступны во время его разработки, и, возможно, это может быть исправлено в стандарте C++ после 17. Но если вы программист, которому нужно перемещать коды ошибок из сторонних библиотек без потери информации через код, не написанный, чтобы знать об этих сторонних библиотеках, тогда является отлично решение.

рассматривать как virtual ключевое слово для обработки кода ошибки сторонней библиотеки-это стирает необходимость в коде, транспортирующем сторонние коды, от необходимости понимать эти коды. Если у вас есть эта проблема в вашей базе кода — и большинство больших баз кода делают — то абсолютно Вы должны быть использование вместо любого отображения кода ошибки или системы перевода, которую вы используете в настоящее время.

Функция GetLastError

Функция GetLastError извлекает значение кода последней ошибки вызывающего потока. Код последней ошибки сохраняется при посредстве базового компонента потока. Многие потоки не записывают поверх друг друга коды последней ошибки.

Visual Basic: Прикладные программы должны вызывать err. LastDllError вместо GetLastError .

У этой функции нет параметров.

Возвращаемые значения

Величина возвращаемого значения является значение кода последней ошибки вызывающего потока. Функции устанавливают это значение путем вызова функция SetLastError . Раздел Возвращаемые значения каждой статьи справочника по функциям обращает внимание на условия, при которых функция устанавливает код последней ошибки.

Windows 95/98/Me: Функции, которые фактически реализованы в 16-разрядном коде, не устанавливают код последней ошибки. Вы должны игнорировать код последней ошибки, когда вызываете эти функции. Они включают в себя функции управления окном, функции GDI и функции мультимедийных средств. Для функций, которые устанавливают код последней ошибки, Вы не должны надеяться на возврат функцией GetLastError того же самого значения и в среде Windows 95 /98/Me и в среде Windows NT.

Замечания

Чтобы получить строку для кодов системных ошибок, используйте функцию FormatMessage . За полным перечнем кодов ошибок, предусмотренных операционной системой, см. статью Коды системных ошибок .

Возвращаемые функцией коды ошибок не являются частью спецификации Windows API и могут различаться в операционных системах или драйверах устройств. По этой причине, имеются функции, документация на которые не включает в себя список кодов ошибок, которые могут быть возвращены.

Читать еще:  Как исправить ошибку 0xc0000001

Вы должны вызвать функцию GetLastError непосредственно тогда, когда величина возвращаемого значения функции указывает, что такой вызов даст вам полезную информацию. Это делается потому, что некоторые функции, когда они завершаются успешно, вызывают функцию SetLastError с нулем, чтобы ликвидировать код ошибки установленный самой последней неудавшейся функцией.

Большинство функций, которые устанавливают последнее значение кода ошибки потока, устанавливает его тогда, когда они завершаются ошибкой; несколько функций устанавливают код ошибки, когда они завершаются успешно. Функция, которая завершилась сбоем, обычно указывается кодом ошибки величины возвращаемого значения типа нуля, ПУСТО (NULL) или — (минус)1. Некоторые функции вызывают SetLastError при условии успешного завершения; на такие случаи обращается внимание в статьях справочника для каждой функции.

Коды Ошибки — это 32-разрядные значения (бит 31 — старший значащий бит). Бит 29 зарезервирован для определяемых программой кодов ошибок; нет ни одного кода системных ошибок, которые бы имели установленным этот бит. Если Вы определяете код ошибки для своего приложения, устанавливайте этот бит в единицу. Это указывает, что код ошибки был задан прикладной программой и гарантирует, что ваш код ошибки не войдет в противоречие с любыми кодами ошибок, определенными системой.

Чтобы преобразовывать системную ошибку в значение HRESULT , используйте макрокоманду HRESULT_FROM_WIN32 .

Код примера

Пример смотри в статье Извлечение кода последней ошибки .

Смотри также

Краткий обзор Обработка ошибок, Функции обработки ошибок, FormatMessage , HRESULT_FROM_WIN32 , SetLastError , SetLastErrorEx

Размещение и совместимость GetLastError

Страница пользовательской ошибки ASP.NET — Server.GetLastError() — null

У меня есть настраиваемая страница ошибок, настроенная для моего приложения:

В Global.asax, Application_Error(), следующий код работает, чтобы получить сведения об исключении:

К моменту, когда я попаду на страницу с ошибкой (

/errors/GeneralError.aspx.cs), Server.GetLastError() имеет значение null

Есть ли способ получить детали исключения на странице ошибки, а не в Global.asax.cs?

ASP.NET 3.5 в Vista/IIS7

Более внимательно рассмотрев мой setup.config, один из комментариев в этот пост очень полезен

в asp.net 3.5 sp1 появился новый параметр redirectMode

Итак, мы можем изменить customErrors , чтобы добавить этот параметр:

режим ResponseRewrite позволяет нам загружать «страницу ошибок» без перенаправления браузера, поэтому URL-адрес остается таким же, и, что важно для меня, информация об исключении не теряется.

с этой очень иллюстративной диаграммой:


(источник: microsoft.com)

по сути, чтобы получить подробности об этих исключениях, мне нужно хранить их самостоятельно в Global.asax для последующего поиска на моей пользовательской странице ошибок.

Похоже, что лучший способ — выполнить большую часть работы в Global.asax, когда пользовательские страницы ошибок обрабатывают полезный контент, а не логику.

Комбинация того, что сказал NailItDown и Виктор. Предпочтительным/простым способом является использование вашего Global.Asax для хранения ошибки, а затем перенаправление на страницу пользовательских ошибок.

Global.asax

Кроме того, вам необходимо настроить web.config:

И, наконец, сделайте все, что вам нужно, за исключением того, что вы сохранили на странице страницы:

Попробуйте использовать что-то вроде Server.Transfer(«

/ErrorPage.aspx»); из метода Application_Error() для global.asax.cs

Затем изнутри Page_Load() от ErrorPage.aspx.cs вы должны быть в порядке, чтобы сделать что-то вроде: Exception exception = Server.GetLastError().GetBaseException();

Server.Transfer() похоже, что исключение висит вокруг.

Несмотря на то, что здесь есть несколько хороших ответов, я должен указать, что не рекомендуется отображать сообщения об исключениях системы на страницах ошибок (что я и предполагаю, что вы хотите сделать). Вы можете непреднамеренно выявить те вещи, которые вы не хотите делать, для злонамеренных пользователей. Например, сообщения исключения сервера Sql очень подробные и могут содержать имя пользователя, пароль и информацию о схеме базы данных при возникновении ошибки. Эта информация не должна отображаться конечному пользователю.

Вот мое решение.

Одним из важных соображений, которые, как мне кажется, здесь не хватает, является сценарий балансировки нагрузки (веб-ферма). Так как сервер, выполняющий global.asax, может отличаться от сервера, что о выполнении пользовательской страницы ошибки, то исключение объекта исключений в приложении не является надежным.

Я все еще ищу надежное решение этой проблемы в конфигурации веб-фермы и/или хорошее объяснение от MS относительно того, почему вы просто не можете получить исключение с Server.GetLastError на странице пользовательских ошибок как вы можете в global.asax Application_Error.

P.S. Небезопасно хранить данные в коллекции приложений без предварительной блокировки и затем отпирания.

Это связано с этими двумя темами ниже, я хочу получить страницу GetHtmlErrorMessage и Session on Error.

Я попробовал и увидел решение, которое не нужно Server.Transfer() or Response.Redirect()

Сначала: удалить ResponseRewrite в web.config

Web.config

Затем Global.asax

Затем errorHandler.aspx.cs

Для ссылок

Это сработало для меня. в MVC 5

Controllers Создать ErrorController.cs

Models Создать FunctionTools.cs

Views Создать папку Error
и в

ViewsError Создать Error.cshtml

Если вы введете этот адрес localhost/Error

И если возникает ошибка

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector
×
×