Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
не работает чего то
#import "user32.dll"
int RegisterWindowMessageA (string param);
#import
#define SCRIPT_NAME "Shutdown.mq4"
#define MT4_MESSAGE "MetaTrader4_Internal_Message"
PostMessageA(WindowHandle(Symbol(),PERIOD_CURRENT),RegisterWindowMessageA(MT4_MESSAGE), 16, SCRIPT_NAME);
почему может не работать?
Если вызывать этот код из MQL4, то, действительно, работать не будет, т. к. все строки в новом MQL - юникодные. Вариант с PostMessageW (и RegisterWindowMessageW) также не работает. Поэтому выход один - вызывать функцию из DLL, в которой строки SCRIPT_NAME и MT4_MESSAGE - ANSI.
P. S. Ну и название скрипта должно быть без расширения.
Если вызывать этот код из MQL4, то, действительно, работать не будет, т. к. все строки в новом MQL - юникодные. Вариант с PostMessageW (и RegisterWindowMessageW) также не работает. Поэтому выход один - вызывать функцию из DLL, в которой строки SCRIPT_NAME и MT4_MESSAGE - ANSI.
P. S. Ну и название скрипта должно быть без расширения.
Можно. Если название скрипта перевести в массив char. И передавать его при помощи SendMessageA (PostMessage тут не подойдёт по определению)
Пробую не так и не так не работает ни через ServiceLoadScriptW не работает.
Может у кого рабочий пример есть??
Можно. Если название скрипта перевести в массив char. И передавать его при помощи SendMessageA (PostMessage тут не подойдёт по определению)
В сторону SendMessage даже не думал, т. к. она ждет ответа, а во многих случаях это приводит к банальному локу.
Пробую не так и не так не работает ни через ServiceLoadScriptW не работает.
Может у кого рабочий пример есть??
Приведенный пример работает только при вызове из DLL. Возможно, завтра вынесу этот пример отдельно: эксперт + скрипт + DLL.
В сторону SendMessage даже не думал, т. к. она ждет ответа, а во многих случаях это приводит к банальному локу.
В этом главное отличие SendMessage. Она выполняется в том же потоке. А раз в том же потоке, то можно и ссылки на локальную память передавать. А как ещё можно передать имя скрипта?
В этом главное отличие SendMessage. Она выполняется в том же потоке. А раз в том же потоке, то можно и ссылки на локальную память передавать. А как ещё можно передать имя скрипта?
У меня получается через PostMessage. Дело в том, что для код DLL далеко не весь выполняется в потоке МТ (в ней создается один или более потоков). В этом случае стараюсь избегать вызовов SendMessage там, где это возможно.
Промучался, из dll тоже не вышло. Да такой пример помог бы !
Ловите.
Правда, из OnInit вызывать WindowHandle не рекомендуется (в примере это так), т. к. окно чарт может быть еще не создано.