GetLastError() очистит специальную переменную last_error. И так скроет все возможные кроме ожидаемой if (GetLastError() == 4066) например.
Хочу использовать саму переменную last_error, но она невидима.
В MT5 GetLastError() переменная _LastError не обнуляется. Слава богу! Для этого изобретен ResetLastError()!
И еще добавлена функция SetUserError(user_error), которая нумерует пользовательские ошибки так:
_LastError = 65536 + user_error.
Очевидно, что используется одна переменная для хранения последней ошибки, а значит по сути лишний наворот.
Можно просто добавить SetLastError и этого достаточно! В идеале просто дать видимость last_error.
Продвинутый программер сам разберется как нумеровать свои ошибки а остальным GetLastError более чем достаточно.
Очень нехвотает этой функции в MT4 что делать помогите!
Можно обойтись и GetLastError(). Скроют "все возможные кроме ожидаемой" ошибки кривые руки "продвинутого" программиста. Неужели для того, чтоб сохранить значение ошибки в переменной и только потом анализировать нужен какой-то особый способ "продвинутости" ?
Обработка ошибок есть сама суть программирования. Вы недооцениваете чтото... я использую много функций в одной программе в разных файлах и хочу чтобы проверка одной специфической ошибки в одной из функций не обнуляла возможные другие ошибки, которые могли возникнуть раньше вообще в других функциях... я уже решил эту проблему вобще-то... не так сложно оказалось подменить убогий GetLastError который обнуляет то что надо сохранять на две простенькие функции ....SetError и GetError . но мне придется всегда включать их...
Обработка ошибок есть сама суть программирования. Вы недооцениваете чтото... я использую много функций в одной программе в разных файлах и хочу чтобы проверка одной специфической ошибки в одной из функций не обнуляла возможные другие ошибки, которые могли возникнуть раньше вообще в других функциях... я уже решил эту проблему вобще-то... не так сложно оказалось подменить убогий GetLastError который обнуляет то что надо сохранять на две простенькие функции ....SetError и GetError . но мне придется всегда включать их...
Что мешает обрабатывать ошибки по месту и времени возникновения, а не накапливать их ? Кстати, если нужно накапливать - сделайте массив, заполняйте - потом анализируйте в нужном Вам месте. В обоих случаях хватит GetLastError().
По поводу сути программирования - повеселили, спасибо .....
...а еще им нужна обработка исключений, они без нее жить не могут...
и явное приведение типов:)
Лично мне влом предусмотреть всякий случай и вставлять GetLastError в любом месте где ошибка может возникнуть.
действительно, а зачем так делать?
ошибку надо обрабатывать по факту её появления.
я так понимаю вы пишите такие конструкции:
OrderSend(...);
if (GetLastError()>0) { ... }
это неправильно.
vit46:
Ну если вы что-то не понимаете это ваши проблемы :) Лично мне влом предусмотреть всякий случай и вставлять GetLastError в любом месте где ошибка может возникнуть. (А где она только не может?) Я пишу код по возможности без ошибок. Но есть и специфические ситуации как ошибка 4066 она может возникать когда захочет от меня это не зависит. И тогда я вынужден написать код обработки для подобных ошибок. Но этот злостный GetLastError обнуляет все ошибки и они не проходят сквозь всю программу. Я проверяю ошибки только один раз в конце неужели не ясно? Подумайте зачем в MT5 всетаки сделали ну почти так как я хочу? Наверное по моей просьбе :)
........и явное приведение типов:)
:) Объясню Вам чего Вы не понимаете, раз намеки не доходят : продвинутые как раз потому и продвинутые, что умеют использовать предоставленные возможности.... Не хватает предоставленных возможностей - пишите на плюсах. В чем проблема ?
Я же уже написал сразу что решил эту проблему! Но вообщето это недостаток языка MQL4 что проще добавить в него функцию ... я же не предлагаю изменить
действительно, а зачем так делать?
ошибку надо обрабатывать по факту её появления.
я так понимаю вы пишите такие конструкции:
OrderSend(...);
if (GetLastError()>0) { ... }
это неправильно.
Нет я пишу так:
OrderSend(...); if (GetError()==конкретный номер){ // код обработки сброс ошибки или наоборот SetError(0); } else if(...) ... ... // и в конце программы if (GetError()) >0){ // гдето необработанное исключение или ошибка номер... // просто сообщение об ошибке }
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
GetLastError() очистит специальную переменную last_error. И так скроет все возможные кроме ожидаемой if (GetLastError() == 4066) например.
Хочу использовать саму переменную last_error, но она невидима.
В MT5 GetLastError() переменная _LastError не обнуляется. Слава богу! Для этого изобретен ResetLastError()!
И еще добавлена функция SetUserError(user_error), которая нумерует пользовательские ошибки так:
_LastError = 65536 + user_error.
Очевидно, что используется одна переменная для хранения последней ошибки, а значит по сути лишний наворот.
Можно просто добавить SetLastError и этого достаточно! В идеале просто дать видимость last_error.
Продвинутый программер сам разберется как нумеровать свои ошибки а остальным GetLastError более чем достаточно.
Очень нехвотает этой функции в MT4 что делать помогите!