Даеш SetLastError!!!

 

GetLastError() очистит специальную переменную last_error. И так скроет все возможные кроме ожидаемой if (GetLastError() == 4066) например.

Хочу использовать саму переменную last_error, но она невидима.

В MT5 GetLastError() переменная _LastError не обнуляется. Слава богу! Для этого изобретен ResetLastError()!

И еще добавлена функция SetUserError(user_error), которая нумерует пользовательские ошибки так:

_LastError = 65536 + user_error.

Очевидно, что используется одна переменная для хранения последней ошибки, а значит по сути лишний наворот.

Можно просто добавить SetLastError и этого достаточно! В идеале просто дать видимость last_error.

Продвинутый программер сам разберется как нумеровать свои ошибки а остальным GetLastError более чем достаточно.

Очень нехвотает этой функции в MT4 что делать помогите!

 
vit46:

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(). Скроют "все возможные кроме ожидаемой" ошибки кривые руки "продвинутого" программиста. Неужели для того, чтоб сохранить значение ошибки в переменной и только потом анализировать нужен какой-то особый способ "продвинутости" ?
 
VladislavVG:
Можно обойтись и GetLastError(). Скроют "все возможные кроме ожидаемой" ошибки кривые руки "продвинутого" программиста. Неужели для того, чтоб сохранить значение ошибки в переменной и только потом анализировать нужен какой-то особый способ "продвинутости" ?

Обработка ошибок есть сама суть программирования. Вы недооцениваете чтото... я использую много функций в одной программе в разных файлах и хочу чтобы проверка одной специфической ошибки в одной из функций не обнуляла возможные другие ошибки, которые могли возникнуть раньше вообще в других функциях... я уже решил эту проблему вобще-то... не так сложно оказалось подменить убогий GetLastError который обнуляет то что надо сохранять на две простенькие функции ....SetError и GetError . но мне придется всегда включать их...
 
vit46:

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

Что мешает обрабатывать ошибки по месту и времени возникновения, а не накапливать их ? Кстати, если нужно накапливать - сделайте массив, заполняйте - потом анализируйте в нужном Вам месте. В обоих случаях хватит GetLastError().

По поводу сути программирования - повеселили, спасибо .....

 
Ну если вы что-то не понимаете это ваши проблемы :) Лично мне влом предусмотреть всякий случай и вставлять GetLastError в любом месте где ошибка может возникнуть. (А где она только не может?) Я пишу код по возможности без ошибок. Но есть и специфические ситуации как ошибка 4066 она может возникать когда захочет от меня это не зависит. И тогда я вынужден написать код обработки для подобных ошибок. Но этот злостный GetLastError обнуляет все ошибки и они не проходят сквозь всю программу. Я проверяю ошибки только один раз в конце неужели не ясно? Подумайте зачем в MT5 всетаки сделали ну почти так как я хочу? Наверное по моей просьбе :)
 
...а еще им нужна обработка исключений, они без нее жить не могут...
 
Integer:
...а еще им нужна обработка исключений, они без нее жить не могут...

и явное приведение типов:)
 
vit46:
Лично мне влом предусмотреть всякий случай и вставлять GetLastError в любом месте где ошибка может возникнуть.

действительно, а зачем так делать?

ошибку надо обрабатывать по факту её появления.

я так понимаю вы пишите такие конструкции:

OrderSend(...);

if (GetLastError()>0) { ... }

это неправильно.

 

vit46:

Ну если вы что-то не понимаете это ваши проблемы :) Лично мне влом предусмотреть всякий случай и вставлять GetLastError в любом месте где ошибка может возникнуть. (А где она только не может?) Я пишу код по возможности без ошибок. Но есть и специфические ситуации как ошибка 4066 она может возникать когда захочет от меня это не зависит. И тогда я вынужден написать код обработки для подобных ошибок. Но этот злостный GetLastError обнуляет все ошибки и они не проходят сквозь всю программу. Я проверяю ошибки только один раз в конце неужели не ясно? Подумайте зачем в MT5 всетаки сделали ну почти так как я хочу? Наверное по моей просьбе :)

........
и явное приведение типов:)
:) Объясню Вам чего Вы не понимаете, раз намеки не доходят : продвинутые как раз потому и продвинутые, что умеют использовать предоставленные возможности.... Не хватает предоставленных возможностей - пишите на плюсах. В чем проблема ?
 
VladislavVG:
:) Объясню Вам чего Вы не понимаете, раз намеки не доходят : продвинутые как раз потому и продвинутые, что умеют использовать предоставленные возможности.... Не хватает предоставленных возможностей - пишите на плюсах. В чем проблема ?

Я же уже написал сразу что решил эту проблему! Но вообщето это недостаток языка MQL4 что проще добавить в него функцию ... я же не предлагаю изменить
 
sergeev:

действительно, а зачем так делать?

ошибку надо обрабатывать по факту её появления.

я так понимаю вы пишите такие конструкции:

OrderSend(...);

if (GetLastError()>0) { ... }

это неправильно.



Нет я пишу так:

OrderSend(...);

if (GetError()==конкретный номер){
         // код обработки сброс ошибки или наоборот
         SetError(0);
         }
else if(...)
...
...
// и в конце программы
if (GetError()) >0){
        // гдето необработанное исключение или ошибка номер...
        // просто сообщение об ошибке
        }
Причина обращения: