Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Вопросы от начинающих MQL5 MT5 MetaTrader 5
Aleksey Vyazmikin, 2019.02.17 06:56
Ещё раз решил повторить эксперимент, вот код
Вот результат
Есть идеи о причине возникновения ошибки?Телепаты в отпуске. А для обычных людей нужно:
Где вам сообщили, что там ошибка? Я вам сказал - ищите в библиотеке момент, где она может записаться в переменную _LastError. При этом не обязательно, что код с ошибкой отработал. Ведь там может быть поиск объекта (и если его нету, то в переменную будет вписан код ошибки) и его создание. Вот если объект не будет создан, то это да - ошибка, но он создаётся и всё отрабатывает. Но после проверки код ошибки (объект до его создания отсутствовал) будет записан в переменную, которую вы потом и считываете у себя в коде.
Телепаты в отпуске. А для обычных людей нужно:
1. Код
2. Не ожидается получения сообщений об ошибке в логе
3. Windows 7 Home 32 бита, билд 1940, к серверу не подключен при тестировании - брокер Открытие.
Где вам сообщили, что там ошибка? Я вам сказал - ищите в библиотеке момент, где она может записаться в переменную _LastError. При этом не обязательно, что код с ошибкой отработал. Ведь там может быть поиск объекта (и если его нету, то в переменную будет вписан код ошибки) и его создание. Вот если объект не будет создан, то это да - ошибка, но он создаётся и всё отрабатывает. Но после проверки код ошибки (объект до его создания отсутствовал) будет записан в переменную, которую вы потом и считываете у себя в коде.
Библиотека либо должна выдавать ошибку при фактической ошибке, либо корректно обрабатывать ситуацию и не выдавать ошибку там, где её нет. Если использование мной библиотеки не описано в классе при проверке на ошибки, то надо это прописать. Во всяком случая пользователю неразумно править библиотеки производителя продукта.
Библиотека либо должна выдавать ошибку при фактической ошибке, либо корректно обрабатывать ситуацию и не выдавать ошибку там, где её нет. Если использование мной библиотеки не описано в классе при проверке на ошибки, то надо это прописать. Во всяком случая пользователю неразумно править библиотеки производителя продукта.
Там нет ошибки, читайте ещё раз:
Где вам сообщили, что там ошибка? Я вам сказал - ищите в библиотеке момент, где она может записаться в переменную _LastError. При этом не обязательно, что код с ошибкой отработал. Ведь там может быть поиск объекта (и если его нету, то в переменную будет вписан код ошибки) и его создание. Вот если объект не будет создан, то это да - ошибка, но он создаётся и всё отрабатывает. Но после проверки код ошибки (объект до его создания отсутствовал) будет записан в переменную, которую вы потом и считываете у себя в коде.
Поэтому - это только ваш интерес узнать почему вы считываете ошибку после штатного выполнения кода. Вы скорее всего не понимаете, что содержание в переменной _LastError кода, отличного от нуля, вовсе не означает обязательное наличие ошибки в коде CGraphic, и не только в нём. В данном случае возможно это простой результат поиска существования объекта, который выполнялся внутри CGraphic в СБ. Был запрос объекта по имени, вернулся результат -1 и в _LastError вписался код 4202. Далее объект был создан, всё отработало и был возврат в вызывающую программу. А в ней вы сразу считываете код ошибки и получаете его. Но ошибки никакой нету - вы видите результат запросов внутри СБ.
Я лишь предполагаю возможную причину того, о чём вы сообщаете.
Поэтому, если вы реально желаете найти реальную ошибку и сообщить о ней, то вам нужно полностью пройтись по всему коду CGraphic в отладчике и отловить реальную ошибку, которая приведёт к сбоям в логике и работе, а не просто заявлять, что вы считали код ошибки, а значит - она точно есть.
Там нет ошибки, читайте ещё раз:
Поэтому - это только ваш интерес узнать почему вы считываете ошибку после штатного выполнения кода. Вы скорее всего не понимаете, что содержание в переменной _LastError кода, отличного от нуля, вовсе не означает обязательное наличие ошибки в коде CGraphic, и не только в нём. В данном случае возможно это простой результат поиска существования объекта, который выполнялся внутри CGraphic в СБ. Был запрос объекта по имени, вернулся результат -1 и в _LastError вписался код 4202. Далее объект был создан, всё отработало и был возврат в вызывающую программу. А в ней вы сразу считываете код ошибки и получаете его. Но ошибки никакой нету - вы видите результат запросов внутри СБ.
Я лишь предполагаю возможную причину того, о чём вы сообщаете.
Поэтому, если вы реально желаете найти реальную ошибку и сообщить о ней, то вам нужно полностью пройтись по всему коду CGraphic в отладчике и отловить реальную ошибку, которая приведёт к сбоям в логике и работе, а не просто заявлять, что вы считали код ошибки, а значит - она точно есть.
Вы же сами в логических рассуждениях указали, что в коде может быть ошибка, и она выражена в не сбросе ошибки. которая была получена в связи с отсутствием объекта до его создания.
Нет, у меня нет компетенции искать ошибку в сложном коде, а потом получать ответ о том, что так и было задумано.
Скажите пожалуйста, это сообщение ошибка пользователя или нет?
Указывает на этот код - D.PointsFill(false);
Вы же сами в логических рассуждениях указали, что в коде может быть ошибка, и она выражена в не сбросе ошибки. которая была получена в связи с отсутствием объекта до его создания.
Нет, у меня нет компетенции искать ошибку в сложном коде, а потом получать ответ о том, что так и было задумано.
Скажите пожалуйста, это сообщение ошибка пользователя или нет?
Указывает на этот код - D.PointsFill(false);
Вообще не понял смысла фразы.
Мне кажется, что я уже всё вам подробно расписал.
Не знаю. Мало информации.
Вообще не понял смысла фразы.
Мне кажется, что я уже всё вам подробно расписал.
Не знаю. Мало информации.
Вы не понимаете, что если код построен на реакции на ошибку(в случае ошибки создаем объект), то после исправления ошибки (создания объекта), логично выполнить сброс этой ошибки, чего по Вашим логическим рассуждениям не делается в библиотеке.
Вот и у меня нет информации, как на эту ошибку реагировать...
Вы не понимаете, что если код построен на реакции на ошибку(в случае ошибки создаем объект), то после исправления ошибки (создания объекта), логично выполнить сброс этой ошибки, чего по Вашим логическим рассуждениям не делается в библиотеке.
Вот и у меня нет информации, как на эту ошибку реагировать...
Нужно чётко осознавать, что ошибкой является не наличие в _LastError кода, отличного от нуля, а возврат функцией результата, указывающего на ошибочное исполнение этой функции. А в _LastError вписывается код, который вам точно укажет на ту ошибку, возникновение которой привело к ошибочному исполнению функции. Поэтому очень сомнительно закладываться в своей логике на описание кода ошибки, хранящейся в сервисной переменной, вместо прямого использования кода возврата функции. Если функция вернула -1 или false или 0 (для каждой функции описан в справке её код ошибочного выполнения), так вот - только анализ результата, возвращаемого функцией должен вами отрабатываться, а не код в _LastError, который не указывает на наличие ошибки, а используется для указания на причину возврата функцией некоего результата.
Функция поиска объекта возвращает значение меньше нуля в случае, если объекта с заданным именем не существует. Ошибка ли это? Нет. Это штатный ответ функции, на основании которого вы и принимаете решение о создании объекта с заданным именем. При этом код, содержащийся в _LastError прямо говорит о том, что "Объекта с запрошенным именем не существует" - можно его создавать.
В общем, устал я вам объяснять. Кто хочет - тот поймёт.