Похоже я нашел таки баг...
За основу взят файл из статьи . Там готовый советник AppWindowTwoButtons.mq5 (прекрасно работает и в МТ4 после смены расширения на mq4).
Так вот, баг появляется даже в этом коде исключительно в том случае, если добавить внешнюю переменную типа:
input color EntryColor = clrBlue;
Тип переменной значения не имеет (проверял int, double и т.д.). Главное, что при добавлении input советник начинает получать уведомления (код деинициализации 5 (REASON_PARAMETERS) ) и после этого крашится или некорректно отрабатывает Destroy, оставляя артефакты в виде неудалившихся контролов.
- www.mql5.com
Копаем дальше.Проблема кроется в файле Dialog.mqh.
При подкидывании файла от МТ5 - всё отрабатывает штатно, как и положено.
Вопрос - как исправить данный баг? Мой продукт использует штатные заголовочные файлы и выставлен в Маркете. Соответственно, я не могу подсунуть "свой" Dialog.mqh в него. Можно, конечно, скопировать весь код из корректного файла и вставить в эксперта, но, как мне кажется, лучше все таки разработчикам централизованно исправить ошибку, тем более что файлы в МТ4 и МТ5 отличаются всего в 5 местах и изменения мизерные.
Копаем дальше.Проблема кроется в файле Dialog.mqh.
При подкидывании файла от МТ5 - всё отрабатывает штатно, как и положено.
Вопрос - как исправить данный баг? Мой продукт использует штатные заголовочные файлы и выставлен в Маркете. Соответственно, я не могу подсунуть "свой" Dialog.mqh в него. Можно, конечно, скопировать весь код из корректного файла и вставить в эксперта, но, как мне кажется, лучше все таки разработчикам централизованно исправить ошибку, тем более что файлы в МТ4 и МТ5 отличаются всего в 5 местах и изменения мизерные.
Вопрос по какому терминалу: старому или MetaTrader 5?
Вопрос по какому терминалу: старому или MetaTrader 5?
MetaTrader 4
Это MQL5 форум, а для старого терминале есть спец. раздел MQL4 и MetaTrader 4 - все вопросы по старому терминалу пишите туда.
Вашу тему перенесу.
CPanelMain *ExtDialog
Не помогло.
CPanelMain *ExtDialog = new CPanelMain(true);
Теперь в окне "Эксперты" выдается (на второй попытке изменить параметры): "20632 bytes of leaked memory" и перечень контролов, которые не удалились.
Удалось побороть путем объявления указателя в OnInit и уничтожения в OnDeinit.
if(UninitializeReason() == REASON_CHARTCHANGE)
вместо функции
UninitializeReason
просто
if(reason == REASON_CHARTCHANGE)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Имеется панель:
В OnInit() прописано:
В OnDeinit
Дополнительно имеется 3 внешних переменных (пока не используются):
Проблема:
Кидается советник на график, всё корректно. Ок - панель появляется, ее можно перемещать, менять ТФ и т.д.
Жму F7 (настройки советника) - Ок. Ничего не меняется, приходит код деинициализации 5 (REASON_PARAMETERS) - все корректно, как будто поменяли какие то входные данные.
Жму F7 второй раз - Ок. Прилетает код деинициализации 8 (REASON_INITFAILED), окно крашится, график закрывается.
В Функции Create панели код:
Код кнопки тоже стандартный:
Не могу понять, в чем причина вылета именно на второй раз. В первый раз то всё отрабатывает нормально.... Если настройки не открывать, то вся панель работает корректно, вылетов нет. Такое ощущение, что где-то что-то забыл сделать....
P.S. Статью https://www.mql5.com/ru/articles/4503 читал кучу раз :)