Foreversoft.ru

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

Getlasterror коды ошибок

How to get the error message from the error code returned by GetLastError()?

After a Windows API call, how can I get the last error message in a textual form?

GetLastError() returns an integer value, not a text message.

10 Answers 10

Updated (11/2017) to take into consideration some comments.

MSDN has some sample code that demonstrates how to use FormatMessage() and GetLastError() together: Retrieving the Last-Error Code

FormatMessage will turn GetLastError’s integer return into a text message.

In general, you need to use FormatMessage to convert from a Win32 error code to text.

Formats a message string. The function requires a message definition as input. The message definition can come from a buffer passed into the function. It can come from a message table resource in an already-loaded module. Or the caller can ask the function to search the system’s message table resource(s) for the message definition. The function finds the message definition in a message table resource based on a message identifier and a language identifier. The function copies the formatted message text to an output buffer, processing any embedded insert sequences if requested.

The declaration of FormatMessage:

GetLastError returns a numerical error code. To obtain a descriptive error message (e.g., to display to a user), you can call FormatMessage:

In C++, you can simplify the interface considerably by using the std::string class:

NOTE: These functions also work for HRESULT values. Just change the first parameter from DWORD dwErrorCode to HRESULT hResult. The rest of the code can remain unchanged.

These implementations provide the following improvements over the existing answers:

  • Complete sample code, not just a reference to the API to call.
  • Provides both C and C++ implementations.
  • Works for both Unicode and MBCS project settings.
  • Takes the error code as an input parameter. This is important, as a thread’s last error code is only valid at well defined points. An input parameter allows the caller to follow the documented contract.
  • Implements proper exception safety. Unlike all of the other solutions that implicitly use exceptions, this implementation will not leak memory in case an exception is thrown while constructing the return value.
  • Proper use of the FORMAT_MESSAGE_IGNORE_INSERTS flag. See The importance of the FORMAT_MESSAGE_IGNORE_INSERTS flag for more information.
  • Proper error handling/error reporting, unlike some of the other answers, that silently ignore errors.

This answer has been incorporated from Stack Overflow Documentation. The following users have contributed to the example: stackptr, Ajay, Cody Gray♦, IInspectable.

Как пользоваться GetLastError() ?

07.06.2013, 22:21

Как сделать обработку ошибок? GetLastError возвращает ошибки 203, 299, 1400
Уже три дня бьюсь :wall: не где не могу найти как делать обработку ошибок и что делать если тебе.

GetLastError
А как иожно сделать так, чтобы при вызове этой функции возвращалась пользовательская ошибка. Т.е. я.

Вопрос по GetLastError
Кто поможет советом? Создаю обычную консольку, в ней пытаюсь функцией CreateFile открыть Com порт.

07.06.2013, 22:30207.06.2013, 23:33 [ТС]307.06.2013, 23:39407.06.2013, 23:47 [ТС]507.06.2013, 23:49607.06.2013, 23:52 [ТС]707.06.2013, 23:59808.06.2013, 00:19 [ТС]908.06.2013, 11:441005.11.2014, 21:241105.11.2014, 22:4112

SetUnhandledExceptionFilter + MiniDumpWriteDump.
Первая функция устанавливает обработчик исключений, вторая
пишет крэш-дамп на диск. Такой дамп потом, имея pdb-символы,
можно открыть в отладчике и подробно разобрать.

Читать еще:  Ошибка на рекурсивном sql уровне 1

Еще одна вариация, несколько более сложная, но и эффективная —
Vectored Exceptions, здесь обработчик будет вызываться до SEH и
это в некоторых ситуациях предпочтительнее.

На RSDN недели две-три назад один человек выкладывал код с
VEH и сбором крэш-дампов, ссылку не могу дать, к сожалению
(запрещено правилами форума).

Добавлено через 51 секунду

05.11.2014, 23:321316.12.2014, 13:3114

Пусть поздновато ,но

Но в msdn есть классный ,пример на всякий случай

Возвращает текстовое описание ошибки в MessageBox-е

19.09.2016, 12:1515

Всем привет, столкнулся с такой интересной проблемой, отлаживаю программу в режиме Debug с точками останова. В программе выполняется функция Createfile , в режиме Release после выполнения функции если выполнить GetLastError, то выводит ошибку 3(к примеру), переключаю в режим Debug Getlasterror дает 0. Хотя функция Createfile также не выполнилась как и в Relelase. как мне в отладчике ловить эту ошибку, мне она нужна для вызова другой функции в случае ошибки, хочу эту функцию отладить. почему в отладке GetlastError не работает?

Добавлено через 5 минут
Всё, разобрался, видимо в режиме Debug GetlastError работает в более широком варианте, между Createfile и Getlasterror выделял динамически память под переменную для ошибки, если выделить статически, то работает, не знаю почему

Коды ошибок в советниках и функция GetLastError()

Как я уже неоднократно упоминал в предыдущих выпусках, если какая-то функция вернула ошибку, то код этой ошибки можно получить с помощью функции GetLastError().

После вызова этой функции код последней ошибки обнуляется, поэтому если в промежутке между двумя вызовами функции GetLastError() не произошло новой ошибки, то второй раз функция вернет 0.

Функция GetLastError() возвращает числовой код ошибки. Если же Вы хотите получить словесное описание ошибки, то используйте функцию ErrorDescription(), описанную в файле stdlib. mqh:

Коды ошибок, возвращаемые сервером:

КонстантаЗначениеОписание
ERR_NO_ERRORНет ошибки
ERR_NO_RESULT1Нет ошибки, но результат неизвестен
ERR_COMMON_ERROR2Общая ошибка
ERR_INVALID_TRADE_PARAMETERS3Неправильные параметры
ERR_SERVER_BUSY4Торговый сервер занят
ERR_OLD_VERSION5Старая версия клиентского терминала
ERR_NO_CONNECTION6Нет связи с торговым сервером
ERR_NOT_ENOUGH_RIGHTS7Недостаточно прав
ERR_TOO_FREQUENT_REQUESTS8Слишком частые запросы
ERR_MALFUNCTIONAL_TRADE9Недопустимая операция нарушающая функционирование сервера
ERR_ACCOUNT_DISABLED64Счет заблокирован
ERR_INVALID_ACCOUNT65Неправильный номер счета
ERR_TRADE_TIMEOUT128Истек срок ожидания совершения сделки
ERR_INVALID_PRICE129Неправильная цена
ERR_INVALID_STOPS130Неправильные стопы
ERR_INVALID_TRADE_VOLUME131Неправильный объем
ERR_MARKET_CLOSED132Рынок закрыт
ERR_TRADE_DISABLED133Торговля запрещена
ERR_NOT_ENOUGH_MONEY134Недостаточно денег для совершения операции
ERR_PRICE_CHANGED135Цена изменилась
ERR_OFF_QUOTES136Нет цен
ERR_BROKER_BUSY137Брокер занят
ERR_REQUOTE138Новые цены
ERR_ORDER_LOCKED139Ордер заблокирован и уже обрабатывается
ERR_LONG_POSITIONS_ONLY_ALLOWED140Разрешена только покупка
ERR_TOO_MANY_REQUESTS141Слишком много запросов
ERR_TRADE_MODIFY_DENIED145Модификация запрещена, так как ордер слишком близок к рынку
ERR_TRADE_CONTEXT_BUSY146Подсистема торговли занята
ERR_TRADE_EXPIRATION_DENIED147Использование даты истечения ордера запрещено брокером
ERR_TRADE_TOO_MANY_ORDERS148Количество открытых и отложенных ордеров достигло предела, установленного брокером

Коды ошибок выполнения, генерируемые клиентским терминалом при выполнении советника:

КонстантаЗначениеОписание
ERR_NO_MQLERROR4000Нет ошибки
ERR_WRONG_FUNCTION_POINTER4001Неправильный указатель функции
ERR_ARRAY_INDEX_OUT_OF_RANGE4002Индекс массива — вне диапазона
ERR_NO_MEMORY_FOR_FUNCTION_CALL_STACK4003Нет памяти для стека функций
ERR_RECURSIVE_STACK_OVERFLOW4004Переполнение стека после рекурсивного вызова
ERR_NOT_ENOUGH_STACK_FOR_PARAMETER4005На стеке нет памяти для передачи параметров
ERR_NO_MEMORY_FOR_PARAMETER_STRING4006Нет памяти для строкового параметра
ERR_NO_MEMORY_FOR_TEMP_STRING4007Нет памяти для временной строки
ERR_NOT_INITIALIZED_STRING4008Неинициализированная строка
ERR_NOT_INITIALIZED_ARRAYSTRING4009Неинициализированная строка в массиве
ERR_NO_MEMORY_FOR_ARRAYSTRING4010Нет памяти для строкового массива
ERR_TOO_LONG_STRING4011Слишком длинная строка
ERR_REMAINDER_FROM_ZERO_DIVIDE4012Остаток от деления на ноль
ERR_ZERO_DIVIDE4013Деление на ноль
ERR_UNKNOWN_COMMAND4014Неизвестная команда
ERR_WRONG_JUMP4015Неправильный переход
ERR_NOT_INITIALIZED_ARRAY4016Неинициализированный массив
ERR_DLL_CALLS_NOT_ALLOWED4017Вызовы DLL не разрешены
ERR_CANNOT_LOAD_LIBRARY4018Невозможно загрузить библиотеку
ERR_CANNOT_CALL_FUNCTION4019Невозможно вызвать функцию
ERR_EXTERNAL_EXPERT_CALLS_NOT_ALLOWED4020Вызовы внешних библиотечных функций не разрешены
ERR_NOT_ENOUGH_MEMORY_FOR_RETURNED_STRING4021Недостаточно памяти для строки, возвращаемой из функции
ERR_SYSTEM_BUSY4022Система занята
ERR_INVALID_FUNCTION_PARAMETERS_COUNT4050Неправильное количество параметров функции
ERR_INVALID_FUNCTION_PARAMETER_VALUE4051Недопустимое значение параметра функции
ERR_STRING_FUNCTION_INTERNAL_ERROR4052Внутренняя ошибка строковой функции
ERR_SOME_ARRAY_ERROR4053Ошибка массива
ERR_INCORRECT_SERIES_ARRAY_USING4054Неправильное использование массива-таймсерии
ERR_CUSTOM_INDICATOR_ERROR4055Ошибка пользовательского индикатора
ERR_INCOMPATIBLE_ARRAYS4056Массивы несовместимы
ERR_GLOBAL_VARIABLES_PROCESSING_ERROR4057Ошибка обработки глобальныех переменных
ERR_GLOBAL_VARIABLE_NOT_FOUND4058Глобальная переменная не обнаружена
ERR_FUNCTION_NOT_ALLOWED_IN_TESTING_MODE4059Функция не разрешена в тестовом режиме
ERR_FUNCTION_NOT_CONFIRMED4060Функция не подтверждена
ERR_SEND_MAIL_ERROR4061Ошибка отправки почты
ERR_STRING_PARAMETER_EXPECTED4062Ожидается параметр типа string
ERR_INTEGER_PARAMETER_EXPECTED4063Ожидается параметр типа integer
ERR_DOUBLE_PARAMETER_EXPECTED4064Ожидается параметр типа double
ERR_ARRAY_AS_PARAMETER_EXPECTED4065В качестве параметра ожидается массив
ERR_HISTORY_WILL_UPDATED4066Запрошенные исторические данные в состоянии обновления
ERR_TRADE_ERROR4067Ошибка при выполнении торговой операции
ERR_END_OF_FILE4099Конец файла
ERR_SOME_FILE_ERROR4100Ошибка при работе с файлом
ERR_WRONG_FILE_NAME4101Неправильное имя файла
ERR_TOO_MANY_OPENED_FILES4102Слишком много открытых файлов
ERR_CANNOT_OPEN_FILE4103Невозможно открыть файл
ERR_INCOMPATIBLE_ACCESS_TO_FILE4104Несовместимый режим доступа к файлу
ERR_NO_ORDER_SELECTED4105Ни один ордер не выбран
ERR_UNKNOWN_SYMBOL4106Неизвестный символ
ERR_INVALID_PRICE_PARAM4107Неправильный параметр цены для торговой функции
ERR_INVALID_TICKET4108Неверный номер тикета
ERR_TRADE_NOT_ALLOWED4109Торговля не разрешена
ERR_LONGS_NOT_ALLOWED4110Длинные позиции не разрешены
ERR_SHORTS_NOT_ALLOWED4111Короткие позиции не разрешены
ERR_OBJECT_ALREADY_EXISTS4200Объект уже существует
ERR_UNKNOWN_OBJECT_PROPERTY4201Запрошено неизвестное свойство объекта
ERR_OBJECT_DOES_NOT_EXIST4202Объект не существует
ERR_UNKNOWN_OBJECT_TYPE4203Неизвестный тип объекта
ERR_NO_OBJECT_NAME4204Нет имени объекта
ERR_OBJECT_COORDINATES_ERROR4205Ошибка координат объекта
ERR_NO_SPECIFIED_SUBWINDOW4206Не найдено указанное подокно
ERR_SOME_OBJECT_ERROR4207Ошибка при работе с объектом
Читать еще:  Как исправить ошибку транзакции

В следующей статье будет рассказано о том, как проверить, разрешено ли торговать эксперту. будет рассказано о функциях IsExpertEnabled(), IsTradeContextBusy() и IsTradeAllowed().

Коды ошибок в советниках и функция GetLastError()

Как я уже неоднократно упоминал в предыдущих выпусках, если какая-то функция вернула ошибку, то код этой ошибки можно получить с помощью функции GetLastError():

После вызова этой функции код последней ошибки обнуляется, поэтому если в промежутке между двумя вызовами функции GetLastError() не произошло новой ошибки, то второй раз функция вернет 0.

Функция GetLastError() возвращает числовой код ошибки. Если же Вы хотите получить словесное описание ошибки, то используйте функцию ErrorDescription(), описанную в файле stdlib.mqh:

Коды ошибок, возвращаемые сервером:

КонстантаЗначениеОписание
ERR_NO_ERRORНет ошибки
ERR_NO_RESULT1Нет ошибки, но результат неизвестен
ERR_COMMON_ERROR2Общая ошибка
ERR_INVALID_TRADE_PARAMETERS3Неправильные параметры
ERR_SERVER_BUSY4Торговый сервер занят
ERR_OLD_VERSION5Старая версия клиентского терминала
ERR_NO_CONNECTION6Нет связи с торговым сервером
ERR_NOT_ENOUGH_RIGHTS7Недостаточно прав
ERR_TOO_FREQUENT_REQUESTS8Слишком частые запросы
ERR_MALFUNCTIONAL_TRADE9Недопустимая операция нарушающая функционирование сервера
ERR_ACCOUNT_DISABLED64Счет заблокирован
ERR_INVALID_ACCOUNT65Неправильный номер счета
ERR_TRADE_TIMEOUT128Истек срок ожидания совершения сделки
ERR_INVALID_PRICE129Неправильная цена
ERR_INVALID_STOPS130Неправильные стопы
ERR_INVALID_TRADE_VOLUME131Неправильный объем
ERR_MARKET_CLOSED132Рынок закрыт
ERR_TRADE_DISABLED133Торговля запрещена
ERR_NOT_ENOUGH_MONEY134Недостаточно денег для совершения операции
ERR_PRICE_CHANGED135Цена изменилась
ERR_OFF_QUOTES136Нет цен
ERR_BROKER_BUSY137Брокер занят
ERR_REQUOTE138Новые цены
ERR_ORDER_LOCKED139Ордер заблокирован и уже обрабатывается
ERR_LONG_POSITIONS_ONLY_ALLOWED140Разрешена только покупка
ERR_TOO_MANY_REQUESTS141Слишком много запросов
ERR_TRADE_MODIFY_DENIED145Модификация запрещена, так как ордер слишком близок к рынку
ERR_TRADE_CONTEXT_BUSY146Подсистема торговли занята
ERR_TRADE_EXPIRATION_DENIED147Использование даты истечения ордера запрещено брокером
ERR_TRADE_TOO_MANY_ORDERS148Количество открытых и отложенных ордеров достигло предела, установленного брокером
Читать еще:  Ошибка субд lost synchronization with server

Коды ошибок выполнения, генерируемые клиентским терминалом при выполнении советника:

КонстантаЗначениеОписание
ERR_NO_MQLERROR4000Нет ошибки
ERR_WRONG_FUNCTION_POINTER4001Неправильный указатель функции
ERR_ARRAY_INDEX_OUT_OF_RANGE4002Индекс массива — вне диапазона
ERR_NO_MEMORY_FOR_FUNCTION_CALL_STACK4003Нет памяти для стека функций
ERR_RECURSIVE_STACK_OVERFLOW4004Переполнение стека после рекурсивного вызова
ERR_NOT_ENOUGH_STACK_FOR_PARAMETER4005На стеке нет памяти для передачи параметров
ERR_NO_MEMORY_FOR_PARAMETER_STRING4006Нет памяти для строкового параметра
ERR_NO_MEMORY_FOR_TEMP_STRING4007Нет памяти для временной строки
ERR_NOT_INITIALIZED_STRING4008Неинициализированная строка
ERR_NOT_INITIALIZED_ARRAYSTRING4009Неинициализированная строка в массиве
ERR_NO_MEMORY_FOR_ARRAYSTRING4010Нет памяти для строкового массива
ERR_TOO_LONG_STRING4011Слишком длинная строка
ERR_REMAINDER_FROM_ZERO_DIVIDE4012Остаток от деления на ноль
ERR_ZERO_DIVIDE4013Деление на ноль
ERR_UNKNOWN_COMMAND4014Неизвестная команда
ERR_WRONG_JUMP4015Неправильный переход
ERR_NOT_INITIALIZED_ARRAY4016Неинициализированный массив
ERR_DLL_CALLS_NOT_ALLOWED4017Вызовы DLL не разрешены
ERR_CANNOT_LOAD_LIBRARY4018Невозможно загрузить библиотеку
ERR_CANNOT_CALL_FUNCTION4019Невозможно вызвать функцию
ERR_EXTERNAL_EXPERT_CALLS_NOT_ALLOWED4020Вызовы внешних библиотечных функций не разрешены
ERR_NOT_ENOUGH_MEMORY_FOR_RETURNED_STRING4021Недостаточно памяти для строки, возвращаемой из функции
ERR_SYSTEM_BUSY4022Система занята
ERR_INVALID_FUNCTION_PARAMETERS_COUNT4050Неправильное количество параметров функции
ERR_INVALID_FUNCTION_PARAMETER_VALUE4051Недопустимое значение параметра функции
ERR_STRING_FUNCTION_INTERNAL_ERROR4052Внутренняя ошибка строковой функции
ERR_SOME_ARRAY_ERROR4053Ошибка массива
ERR_INCORRECT_SERIES_ARRAY_USING4054Неправильное использование массива-таймсерии
ERR_CUSTOM_INDICATOR_ERROR4055Ошибка пользовательского индикатора
ERR_INCOMPATIBLE_ARRAYS4056Массивы несовместимы
ERR_GLOBAL_VARIABLES_PROCESSING_ERROR4057Ошибка обработки глобальныех переменных
ERR_GLOBAL_VARIABLE_NOT_FOUND4058Глобальная переменная не обнаружена
ERR_FUNCTION_NOT_ALLOWED_IN_TESTING_MODE4059Функция не разрешена в тестовом режиме
ERR_FUNCTION_NOT_CONFIRMED4060Функция не подтверждена
ERR_SEND_MAIL_ERROR4061Ошибка отправки почты
ERR_STRING_PARAMETER_EXPECTED4062Ожидается параметр типа string
ERR_INTEGER_PARAMETER_EXPECTED4063Ожидается параметр типа integer
ERR_DOUBLE_PARAMETER_EXPECTED4064Ожидается параметр типа double
ERR_ARRAY_AS_PARAMETER_EXPECTED4065В качестве параметра ожидается массив
ERR_HISTORY_WILL_UPDATED4066Запрошенные исторические данные в состоянии обновления
ERR_TRADE_ERROR4067Ошибка при выполнении торговой операции
ERR_END_OF_FILE4099Конец файла
ERR_SOME_FILE_ERROR4100Ошибка при работе с файлом
ERR_WRONG_FILE_NAME4101Неправильное имя файла
ERR_TOO_MANY_OPENED_FILES4102Слишком много открытых файлов
ERR_CANNOT_OPEN_FILE4103Невозможно открыть файл
ERR_INCOMPATIBLE_ACCESS_TO_FILE4104Несовместимый режим доступа к файлу
ERR_NO_ORDER_SELECTED4105Ни один ордер не выбран
ERR_UNKNOWN_SYMBOL4106Неизвестный символ
ERR_INVALID_PRICE_PARAM4107Неправильный параметр цены для торговой функции
ERR_INVALID_TICKET4108Неверный номер тикета
ERR_TRADE_NOT_ALLOWED4109Торговля не разрешена
ERR_LONGS_NOT_ALLOWED4110Длинные позиции не разрешены
ERR_SHORTS_NOT_ALLOWED4111Короткие позиции не разрешены
ERR_OBJECT_ALREADY_EXISTS4200Объект уже существует
ERR_UNKNOWN_OBJECT_PROPERTY4201Запрошено неизвестное свойство объекта
ERR_OBJECT_DOES_NOT_EXIST4202Объект не существует
ERR_UNKNOWN_OBJECT_TYPE4203Неизвестный тип объекта
ERR_NO_OBJECT_NAME4204Нет имени объекта
ERR_OBJECT_COORDINATES_ERROR4205Ошибка координат объекта
ERR_NO_SPECIFIED_SUBWINDOW4206Не найдено указанное подокно
ERR_SOME_OBJECT_ERROR4207Ошибка при работе с объектом

В следующем выпуске я расскажу о том, как проверить, разрешено ли торговать эксперту. Я расскажу о функциях IsExpertEnabled(), IsTradeContextBusy() и IsTradeAllowed().

Ссылка на основную публикацию
Adblock
detector