Как передать информацию другой программе

 
Привет!
Помогите пожалуйста, может кто-нибудь сталкивался с такой ситуацией.

Надо передать информацию другой программе из Meta Trader 3

Единственная возможность, как мне представляется через файл.
Но тут возникают 2 проблемы
1) Надо данные передавать достаточно быстро
2) Как не вызвать одновременного обращениия к файлу и как следствие ошибки.

Возможно кто-то сталкивался с подобной проблемой. Посоветуйте - ума не приложу что делать!!
 
Зависит от объема информации. Те же named pipes или memory-mapped files. А если немного - так и вообще sendmessage.
 
Зависит от объема информации. Те же named pipes или memory-mapped files. А если немного - так и вообще sendmessage.


нужно только 3 сигнала buy и Sell и Price

но нужно передовать очень быстро ?

Те же named pipes или memory-mapped files.


Можно по подробние или лудше пример?

спасибо!
 
Тогда обычный SendMessage(WM_USER), в котором в wparam передается нолик или единичка в зависимости от того, покупаем или продаем. (но если у вас программа-приемник MT4 - то это не сработает). Для memory-mapped лучше почитать winapi-документацию. Вкратце - это кусок памяти, который для пользователя выглядит как временный файл. Одна программа создает и записывает, другая читает.

все три метода достаточно быстрые (время пренебрежимо мало сравнительно с интернет-задержками для покупки-продажи)
 
Тогда обычный SendMessage(WM_USER), в котором в wparam передается нолик или единичка в зависимости от того, покупаем или продаем. (но если у вас программа-приемник MT4 - то это не сработает). Для memory-mapped лучше почитать winapi-документацию. Вкратце - это кусок памяти, который для пользователя выглядит как временный файл. Одна программа создает и записывает, другая читает.

все три метода достаточно быстрые (время пренебрежимо мало сравнительно с интернет-задержками для покупки-продажи)


Мне нужно передоват сигналы из MT3 к Delphi Api и неуверен что MT3 подержит SendMessage(WM_USER) ?
 
Про МТ3 понятно, я говорю о программе-ПРИЕМНИКЕ, т.е. той, куда у вас информация идет. И если этот приемник - обычный советник в МТ4, то он обработать пришедший SendMessage просто так не сможет.
Вообще, все сильно зависит от того, куда вы эту информацию шлете (я так понимаю, в какой-то другой торговый терминал?). В MBT Navigatore очень приличное API, которое может все, у саксобанка - увы. И т.п.

Для MT3 придется использовать MT3 API, и все winapi-функции будут доступны. Без этого, боюсь, остается только работа с обычными файлами.
 
Про МТ3 понятно, я говорю о программе-ПРИЕМНИКЕ, т.е. той, куда у вас информация идет. И если этот приемник - обычный советник в МТ4, то он обработать пришедший SendMessage просто так не сможет.
Вообще, все сильно зависит от того, куда вы эту информацию шлете (я так понимаю, в какой-то другой торговый терминал?). В MBT Navigatore очень приличное API, которое может все, у саксобанка - увы. И т.п.

Для MT3 придется использовать MT3 API, и все winapi-функции будут доступны. Без этого, боюсь, остается только работа с обычными файлами.


программе-ПРИЕМНИКЕ = My Delphi Program ?
 
Про МТ3 понятно, я говорю о программе-ПРИЕМНИКЕ, т.е. той, куда у вас информация идет. И если этот приемник - обычный советник в МТ4, то он обработать пришедший SendMessage просто так не сможет.
Вообще, все сильно зависит от того, куда вы эту информацию шлете (я так понимаю, в какой-то другой торговый терминал?). В MBT Navigatore очень приличное API, которое может все, у саксобанка - увы. И т.п.

Для MT3 придется использовать MT3 API, и все winapi-функции будут доступны.


Без этого, боюсь, остается только работа с обычными файлами.

вот тут та и проблема 2) Как не вызвать одновременного обращениия к файлу и как следствие ошибки.

Можно пример как с МТ3 послать данные?
 
Собственно, одновременное обращение не так уж страшно. Пытайтесь в дельфи прочитать файл в эксклюзивном режиме, если не получилось (файл еще занят) - ловите исключение-exception и пробуйте еще раз, пока не сработает.

А в МТ3 работайте обычными функциями FileOpen,FileWrite
 
Собственно, одновременное обращение не так уж страшно. Пытайтесь в дельфи прочитать файл в эксклюзивном режиме, если не получилось (файл еще занят) - ловите исключение-exception и пробуйте еще раз, пока не сработает.


буду очень признателен если можно какой нибудь пример?

спасибо!
 
у меня нет сейчас третьего МТ, я давно на четвертом, поэтому в корректности кода не уверен.
Пишите самым обычным способом, типа:

var h1(0);
h1 = FileOpen("test.csv", ";");
FileWrite(h1, 1);
FileClose(h1);



А со стороны дельфи - используйте winapi OpenFile

HFILE OpenFile(
LPCSTR lpFileName, // pointer to filename
LPOFSTRUCT lpReOpenBuff, // pointer to buffer for file information
UINT uStyle // action and attributes
);

и вот uStyle должно быть равно (OF_READ or OF_SHARE_EXCLUSIVE).
Или CreateFile (но там атрибутов побольше)

Это что касается winapi.

Я думаю, в дельфи можно какими-то внутренними средствами языка задать эксклюзивный режим - посмотрите в доках.

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