Запуск скриптов извне - страница 2

 
MetaDriver:

Идея интересная. Тут возможен некоторый прорыв. Создание call-back функций вызываемых из внешних приложений (в частности из другого терминала, в том числе MT4). Типа: пишем в в map-файл  номер чарта, имя функции и параметры, потом засылаем внешнее сообщение в чарт, эксперт-драйвер перехватывает, парсит map-файл и уже адресно засылает в соответствующий чарт юзерское сообщение с именем функции и параметрами.

Щупать надо.

С именованными каналами (трубами) эта идея будет еще более простой в реализации. Эксперт-драйвер будет pipe-сервером, обрабатывающим сообщения от pipe-клиентов (внешних приложений) по своему протоколу (реализацию можно сделать в виде работы не с бинарными данными, а со строками, тогда еще проще). Тогда необходимость в использовании WinAPI для дергания событий чартов и файлов, отображаемых в память, отпадет - данные в режиме реального времени сами придут по этому каналу. А дальше, как вы и написали, действительно, можно заслать  в соответствующий чарт юзерское сообщение с именем функции и параметрами.

Ренат, я только что увидел, что у вас были идеи насчет реализации Named Pipes в рамках языка MQL. Это было бы здорово, думаю, не я один так считаю.

Реализация взаимодействия между клиентскими терминалами MetaTrader 5 при помощи именованных каналов (Named Pipes)
Реализация взаимодействия между клиентскими терминалами MetaTrader 5 при помощи именованных каналов (Named Pipes)
  • 2010.07.01
  • investeo
  • www.mql5.com
Данная статья знакомит с реализацией межпроцессного взаимодействия между терминалами MetaTrader 5 посредством именованных каналов (named pipes). Предложен класс CNamedPipes, реализующий возможность использования именованных каналов. Рассмотрен тиковый индикатор для тестирования связи между двумя клиентскими терминалами MetaTrader 5 и измерения общей пропускной способности системы. Представленный метод взаимодействия оказался пригодным для отправки котировок в реальном времени.
 
MetaDriver:

Идея интересная. Тут возможен некоторый прорыв. Создание call-back функций вызываемых из внешних приложений (в частности из другого терминала, в том числе MT4). Типа: пишем в в map-файл  номер чарта, имя функции и параметры, потом засылаем внешнее сообщение в чарт, эксперт-драйвер перехватывает, парсит map-файл и уже адресно засылает в соответствующий чарт юзерское сообщение с именем функции и параметрами.

Щупать надо.

а че там щупать, все уже прощупано и прорвались мы в космос :).

это WM_KEYDOWN. причем код клавиши может быть и не только реальный ASCII, а даже отрицательный.

 
220Volt:
Проясните пожалуйста. Я пологал что dll загружается в память всего один раз, не зависимо от того сколько приложений загрузило. И вот например такая схема: два приложения, одна длл, в длл у нас переменные, вопрос - переменные одни для двух приложений или разные? А одно приложение и одна длл, возможно ли при каждом следующем вызове не терять содержание переменных (не впихивая их в память насильно)? И еще: когда эксперт инициирует вызов длл, вызов происходит от имени терминала или эксперта? т.е. как следствие отсюда - будут ли одними глобальные переменные длл для разных экспертов, загрузивших одну и ту же длл?

1 ) DLL грузится в процесс терминала, поэтому все эксперты получают один экземляр глобальных переменных, таким образом можно устроить обмен данными между экспертами/индикаторами/скриптами. Но как только выгрузятся все эксперты использующие одну DLL, библиотека будет выгружена и на следующей загрузке данные будут инициализированы заново.

2) Действительно через DLL можно организовать обмен данными между процессами, для этого в MSVC имеются специальные "штучки"

#pragma section( "myseg" , shared )              // создаём секцию с именем "myseg" которая будет разделяться между процессами.
__declspec(allocate("myseg")) int SharedMem=0;   // создаём разделяемую переменную помещая её в соответствующую секцию


Остаётся только создать экспортируемые функции для доступа к разделяемым переменным.
 
mql5:

Спасибо, очень познавательно. 

Причина обращения: