Скачать MetaTrader 5

ResetLastError()

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Максим
413
Максим 2010.10.24 18:39 

Не совсем понятно, перед какими функциями необходимо её вызывать, а перед какими нет?

void OnStart()

{

ResetLastError();

PrintFormat("Начальный код ошибки = %i", GetLastError());

// Создадим ошибку

double volumeMin;

if (SymbolInfoDouble(Symbol() + "aaa", SYMBOL_VOLUME_MIN, volumeMin))

PrintFormat("Вызов 1 SymbolInfoDouble. Ошибок нет");

else

PrintFormat("Вызов 1 SymbolInfoDouble. Код ошибки = %i", GetLastError());

// Проверим её влияние на следующий вызов

if (SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MIN, volumeMin))

PrintFormat("Вызов 2 SymbolInfoDouble. Ошибок нет");

else

PrintFormat("Вызов 2 SymbolInfoDouble. Код ошибки = %i", GetLastError());

}

Смотрим в журнал:

2010.10.24 18:18:50 test (EURUSD,H1) Вызов 2 SymbolInfoDouble. Ошибок нет

2010.10.24 18:18:50 test (EURUSD,H1) Вызов 1 SymbolInfoDouble. Код ошибки = 4301

2010.10.24 18:18:50 test (EURUSD,H1) Начальный код ошибки = 0 

 Получается, что не перед всеми функциями нужно вызывать ResetLastError()? Или это не показательный пример и по-хорошему нужно сбрасывать код после обнаружения/обработки ошибки, чтобы проверить статус ошибки после очередного вызова некоторой функции?

Документация по MQL5: Общие функции / ResetLastError
Документация по MQL5: Общие функции / ResetLastError
  • www.mql5.com
Общие функции / ResetLastError - Документация по MQL5
Slava
Модератор
6914
Slava 2010.10.24 18:50  

Не все функции, в результате которых может взвестись ошибка, сбрасывают в 0 переменную _LastError.

Мы обязательно отразим этот факт с подробностями в документации по языку. Пока руки не дошли.

Максим
413
Максим 2010.10.24 18:53  

Некоторые функции перегружены и возвращают логическое значение, как признак успешности выполнения некоторой операции. Например: SymbolInfoDouble.

double SymbolInfoDouble(string nameint prop_id); 

bool  SymbolInfoDouble(string nameint prop_iddouble& double_var);

 Это как-то связано с указанным вопросом: например, во втором варианте автоматически выполняется ResetLastError?

Slava
Модератор
6914
Slava 2010.10.24 18:58  
Maxx:

Некоторые функции перегружены и возвращают логическое значение, как признак успешности выполнения некоторой операции. Например: SymbolInfoDouble.

double SymbolInfoDouble(string nameint prop_id); 

bool  SymbolInfoDouble(string nameint prop_iddouble& double_var);

 Это как-то связано с указанным вопросом: например, во втором варианте автоматически выполняется ResetLastError?

Как раз во втором варианте и не нужно ничего сбрасывать. Так как за ошибкой Вы идёте только в том случае, когда функция вернула false
Максим
413
Максим 2010.10.24 19:35  
Спасибо большое за разъяснения!
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий