Молодец! Другое сказать не могу. К сожалению для связи MQL5 - .NET все еще нужен посредник, что делает всю конструкцию слишком громоздкую.
К сожалению для связи MQL5 - .NET все еще нужен посредник, что делает всю конструкцию слишком громоздкую.
Согласен. Кстати, для простых взаимодействий есть отличная штука - Inverse P/Invoke - взаимодействие без посредников.
Еще пытался использовать ILMerge, чтобы объединить все 3 сборки в QExportWrapper.dll - не получилось, вернее объединил, но после объединения из mql5 не видит экспортируемые функции
Большое спасибо за выложенный пример. Вот уже неделю (по вечерам) я бьюсь над созданием библиотеки обмена данными между.net и mql5.
Я не силен в С++ и этот пост мне был очень полезен.
Только вот одна беда. после компиляции под х64 инициализация сервиса выдает ошибку.
ExportService^ service = gcnew ExportService(serverName); // <- ServiceManaged.cpp
в "catch" не заходит. процесс просто "вылетает" без каких-либо объяснений.
Как бы мне вывести эту ошибку в лог для дальнейшего анализа ? или может вы уже сталкивались с данной проблемой и решение уже есть ????
Очень интересно..Спасибо..Но может быть Сегодня есть более простые возможности*??
Статья хороша тем, что рассказывает про WCF тем, кто незнаком с технологией. Кстати, я проверял быстродействие WCF через интернет на дистанции Питер - Одесса, получалась приличная скорость около 14000 двусторонних транзакций/сек пакетами по 1 кБ. Мне лично технология нравиться своей объектно-ориентированностью, то есть передается не поток байтов (хотя можно и так), а экземпляры классов, то есть на приемном конце не надо этот поток декодировать.
Ну а по теме котировок - проще использовать memory mapping. В приложении .NET запускаем отдельную задачу с мьютексом, MQL4 грузит в память данные и сбрасывает мьютекс, после чего приложение читает данные. Так проще и быстрее, и ДЛЛ не нужна. Надо только в MQL4 добавить системные ДЛЛ для поддержки мэппинга и мьютексов, тут недавно статья была по этой теме.
1) Если у вас терминал x64, то скорее всего будет необходимо перекомпилировать с++ проект в x64. На всякий случай делается это так: Visual Studio -> Properties (вашего с++ проекта) -> Configuration Manager -> и там через выпадающий список либо через <New...> меняете на x64. Компилируем. Готово. Если не компилируется - проверьте References проекта, пройдитесь по ошибкам компилятора.
2) У меня были проблемы c советником, он даже не инициализировался. Я заметил это только при отключении советника от графика, когда вылетела ошибка init failed (забавно..). Советник впадал в бесконечный Sleep еще на стадии инициализации и все дело было в этих строчках (в QService.mqh):
QService::EnterCriticalSection()
{
while (GlobalVariableCheck("QService_CriticalSection") > 0)
Sleep(1);
GlobalVariableTemp("QService_CriticalSection");
}
После дебага и тщетных попыток понять этот "Sleep(1)", заменил код на:
QService::EnterCriticalSection()
{
if(!GlobalVariableCheck("QService_CriticalSection"))
GlobalVariableTemp("QService_CriticalSection");
}
P.S: Спасибо автору статьи! Все круто расписано!
Очень интересно..Спасибо..Но может быть Сегодня есть более простые возможности*??
Конечно есть - использование подключения через встроенную в терминал возможность. Это PIPE-канал.

- www.mql5.com

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья МetaTrader 5. Экспорт котировок в .NET приложение, используя WCF сервисы:
Автор: Alexander