Новая версия платформы MetaTrader 5 build 4000: Улучшения в торговом отчете и веб-терминале - страница 19

 
A100 #:

Нет:

Результат: 5002:5002:0

Откуда тогда у меня такое давнее стойкое "знание", что GetLastError обнуляет код ошибки? Хм...

 
Artyom Trishkin #:

Библиотека Анатолия Кажарского вообще-то )

А....., тогда ладно, проблема не существенна и можно о ней забыть.))
 
Artyom Trishkin #:

Откуда тогда у меня такое давнее стойкое "знание", что GetLastError обнуляет код ошибки? Хм...

Потому, что по логике так должно быть. И пример не совсем корректный. Если после вызова GetLastError который возвращает ошибку поставить какое-то действие без ошибки, то следующий вызов вернёт 0 и все последующие вызовы будут возвращать 0. 
 
Alexey Viktorov #:
Потому, что по логике так должно быть. И пример не совсем корректный. Если после вызова GetLastError который возвращает ошибку поставить какое-то действие без ошибки, то следующий вызов вернёт 0 и все последующие вызовы будут возвращать 0. 

Не тестировал никогда. Лет сто назад просто, по-моему, прочёл об этом где-то на mql4.com. С той поры учитываю такое обстоятельство. Но то было давно, и, быть может, что-то уже и поменялось

 
Andrey Dik #:
А....., тогда ладно, проблема не существенна и можно о ней забыть.))

Ну почему же... Проблема есть. Насчёт её существенности решать не нам.

 
Alexey Viktorov #:
Потому, что по логике так должно быть. И пример не совсем корректный. Если после вызова GetLastError который возвращает ошибку поставить какое-то действие без ошибки, то следующий вызов вернёт 0 и все последующие вызовы будут возвращать 0.

Поставил StringInit:

void OnStart()
{                                  //Результат:
    FileOpen( ".....", 0 );
    Print( GetLastError());        //5002
    string s;
    Print( StringInit( s, 5, 0 )); //true
    Print( GetLastError());        //5002
         ResetLastError(); 
    Print( GetLastError());        //0
}

и что изменилось?

 
Artyom Trishkin #:

Ну почему же... Проблема есть. Насчёт её существенности решать не нам.


Вот и хорошо.
Я лишь хотел подчеркнуть, что множество проблем остаются нерешенными только лишь потому, что забалтываются и остаются вне внимания разработчиков.
 
A100 #:

Поставил StringInit

и что изменилось?

При этом, если, используя класс CCanvas, попробовать создать объект с нулевыми шириной и высотой, то GetLastError вернёт 0. Хотя ресурс не создаётся из-за его нулевого размера. Изначально была речь про коды, основанные на CCanvas, и что там ошибка при создании ресурса не возвращается (а значит - где-то обнуляется ещё до возврата в управляющую программу, из которой вызов GetLastError вернёт 0). Поэтому приходится самому это всё контролировать. Но люди вот попадают на странное поведение - вроде всё нормально, но при этом не работает. Ветер оттуда дул, когда я поднял вопрос о длине пути, из-за которого тоже ресурс не создаётся в CCanvas, при этом в журнале ошибок не пишется.

 
Artyom Trishkin #:

При этом, если используя класс CCanvas попробовать создать объект с нулевыми шириной и высотой, то GetLastError вернёт 0.

Можете так решить проблему.
#define ResetLastError GetLastError
  #include <Canvas.mqh>
#undef ResetLastError
 
A100 #:

Поставил StringInit

и что изменилось?

Был не прав. Каюсь. Надо было сначала проверить.