я так понимаю надо использовать WndProc ?
Используйте Pipe каналы, просто и быстро. Писал такой обмен между приложением на C# и советником, работает отлично. При этом в приложении можно много потоков запустить, и принимать данные сразу от большого кол-ва советников.
Мне бы примерчик буду очень признателен спасибо
divert:
Мне бы примерчик буду очень признателен спасибо
Мне бы примерчик буду очень признателен спасибо
https://www.mql5.com/ru/articles/503
https://msdn.microsoft.com/ru-ru/library/system.io.pipes.namedpipeclientstream%28v=vs.90%29.aspx
Спасибо. Почитал. Но мне не надо много передавать информации. Мне надо только одну строку с индикатора в клиент на c#. Идеально подходит atom. Только как это реализовать на c#
divert:
Спасибо. Почитал. Но мне не надо много передавать информации. Мне надо только одну строку с индикатора в клиент на c#. Идеально подходит atom. Только как это реализовать на c#
https://www.youtube.com/watch?v=WK78-jr6jRE
Спасибо. Почитал. Но мне не надо много передавать информации. Мне надо только одну строку с индикатора в клиент на c#. Идеально подходит atom. Только как это реализовать на c#
... using System.Runtime.InteropServices; ... [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] static extern uint GlobalGetAtomName(ushort nAtom, StringBuilder lpBuffer, int nSize); const int WM_USER = ???; // подставить значение protected override void WndProc(ref Message m) { if(m.Msg == WM_USER) { StringBuilder sb = new StringBuilder(255); GlobalGetAtomName((ushort)m.LParam, sb, 255); textBox1.Text = sb.ToString(); } base.WndProc(ref m); }работает но я передаю 10 символов . а отображаеться только первый. почему остальных нет ?
вот так передаю
вот так передаю
string SendData = "1234567890"; int Atom = GlobalAddAtomA(SendData); string str; int hwnd=FindWindowW(str,"Form1"); if(hwnd==0) { Comment("\n Не найдено окно ", "\n Хендл окна ",hwnd); } else {Comment("\n Хендл окна ",hwnd ); SendMessageA(hwnd,WM_USER,0,Atom); GlobalDeleteAtom (Atom);
В MQL4 строки - юникодные. И вы пытаетесь передать юникодные строки в ансишные функции
int GlobalGetAtomNameA(int nAtom, string lpBuffer, int nSize); int GlobalAddAtomA (string lpString);
При этом совершенно законно используете юникодную функцию FindWindowW
Я вас понял. Так почему только первый символ строки отображается? Как в си переделать на Анси тогда?
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Решил передавать строки через Атомы. На мой взгляд это достаточно просто и не приходится использовать внешние DLL. Отсутствие DLL-посредника должно ускорить процесс передачи данных, ИМХО...
Привожу рабочий код для отправки строки из МТ4 в приложение , форма имеет заголовок "Form2".
1. Код для отправки строки из МТ4. Реализован через Атомы.
вот возник вопрос как на c# написать обработчик принятого сообщения?
есть код на delphi