Вызов функции DLL-обёртки на C++/CLI для C# вызывает критическую ошибку и прекращение выполнения советника.
Мы работаем над нативным импортом дотнет библиотек по аналогии с обычными dll.
Это очень приятная новость! А когда примерно этот релиз выйдет?
Почему не проще организовать что-то вроде локального сервиса (можно даже WCF) с возможностью взаимодействия через именованные каналы? Это сразу решит проблемы взаимодействия с терминалом практически на любом языке. Вот представьте, пользователь подключил в своё ПО этот сервис, подписался на CallBack функции типа OnCalculate или OnTick и может управлять ордерами, строить индикаторы и получать котировки прямо из своего ПО, вызывая функции сервиса. Очень удобно.
Суть в том, что мне нужно вызывать функции библиотеки C++/CLI, которая будет обращаться к программе на C# и взаимодействовать с ней.
Падение происходит только если функция на С++ обращается к классам из C# библиотеки. Если их убрать, а оставить только код C++, то советник работает нормально и функция вызывается как надо.
Проблема скорее всего связана именно с терминалом, т.к. я тестировал вызовы функции с помощью другого проекта на C++ и ошибок никаких не возникало. Пробовал также DllExport непосредственно из C#, но это тоже не работает.
Бинарники, скрипт и код проекта прилагаю. Если предложите другой более удобный вариант взаимодействия с терминалом, буду рад. Требуется именно двухсторонний обмен данными.
"Пробовал также DllExport непосредственно из C#, но это тоже не работает." - как это не работает? Специально только что проверил и убедился что все работает превосходно. Уже более полугода использую этот метод для написания dll на c#.
В настоящий момент имеется единственная проблема: обратная связь с МТ. То есть вызвать что-то в МТ или оповестить МТ из внешней программы.
Проверять по таймеру или на каждом тике наличия сообщения для МТ - это большой костыль.
Будем надеяться что разработчики этот вопрос решат. Тогда можно будет делать любые расширения для МТ.
В следующем релизе будет родная поддержка дотнета.
А коллбэк когда? Обещали давно.
Суть в том, что мне нужно вызывать функции библиотеки C++/CLI, которая будет обращаться к программе на C# и взаимодействовать с ней.
Падение происходит только если функция на С++ обращается к классам из C# библиотеки. Если их убрать, а оставить только код C++, то советник работает нормально и функция вызывается как надо.
Дык, указатели на классы C# где хранятся между вызовами функций С++ из MQL?
PS Код не смотрел.
ЗЫ2 У меня сокеты сделаны на C++/CLI - все прекрасно работает. Точнее, работало, давно для MQL не использовал.
Проверять по таймеру или на каждом тике наличия сообщения для МТ - это большой костыль.
Будем надеяться что разработчики этот вопрос решат. Тогда можно будет делать любые расширения для МТ.
Ну, и в самом МТ все тоже самое. Какая разница, что внешняя, что внутренняя? Все по тикам.
В следующем релизе будет родная поддержка дотнета.
Очень круто, жду релиз! И примерчик dll на C# не забудьте пожалуйста добавить.
Очень круто, жду релиз! И примерчик dll на C# не забудьте пожалуйста добавить.
Ну, без колбеков это игры все. Чуть меньше работы, и только. А если под С++/CLI писать, то вообще без разницы - есть или нет.
Ну, без колбеков это игры все. Чуть меньше работы, и только. А если под С++/CLI писать, то вообще без разницы - есть или нет.
Понятно, что колбеки нужны, но пусть это будет первым шагом. А под С++/CLI писать что-то серьезное, например с WCF, довольно муторно, чисто технически. Я не знаю, как сделать колбеки без полноценных указателей.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Суть в том, что мне нужно вызывать функции библиотеки C++/CLI, которая будет обращаться к программе на C# и взаимодействовать с ней.
Падение происходит только если функция на С++ обращается к классам из C# библиотеки. Если их убрать, а оставить только код C++, то советник работает нормально и функция вызывается как надо.
Проблема скорее всего связана именно с терминалом, т.к. я тестировал вызовы функции с помощью другого проекта на C++ и ошибок никаких не возникало. Пробовал также DllExport непосредственно из C#, но это тоже не работает.
Бинарники, скрипт и код проекта прилагаю. Если предложите другой более удобный вариант взаимодействия с терминалом, буду рад. Требуется именно двухсторонний обмен данными.