Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вот пример простой формы, нарисованной на шарпе за 10 минут с советником. Форма получает тики с графика, напрямую из советника как с нативной dll, без сокетов, файлов и прочего. Причем форма прикреплена к графику. С прикреплением есть некоторая проблема, которую нужно решить. Но можно и не прикреплять, тут кому что нравится.
Вот пример простой формы, нарисованной на шарпе за 10 минут с советником. Форма получает тики с графика, напрямую из советника как с нативной dll, без сокетов, файлов и прочего. Причем форма прикреплена к графику. С прикреплением есть некоторая проблема, которую нужно решить. Но можно и не прикреплять, тут кому что нравится.
Расскажи каким компилятором с ГитХаба пользовался. Или руками шарповый компил редактировал? На фиг нужно. Проще С++ ДЛЛ написать в смешанном коде (управляемый+ неуправляемый).
Расскажи каким компилятором с ГитХаба пользовался. Или руками шарповый компил редактировал? На фиг нужно. Проще С++ ДЛЛ написать в смешанном коде (управляемый+ неуправляемый).
Я в предыдущем посте написал: все штатными средствами VS делается. Я использую VS 2017 Community. Просто в начале работы с проектом к нему подключается библиотека DllExport с Nuget. Ничего после компиляции проекта дорабатывать руками не требуется, от слова СОВСЕМ.
Шаблон от R.Giesecke не рекомендую. Вот с ним реальные танцы с бубном, если вообще получится запустить. С этой библиотекой вы даже разницы не почувствуйте. Ваша dll сама "станет native" в процессе обычной компиляции.
Я в предыдущем посте написал: все штатными средствами VS делается. Я использую VS 2017 Community. Просто в начале работы с проектом к нему подключается библиотека DllExport с Nuget. Ничего после компиляции проекта дорабатывать руками не требуется, от слова СОВСЕМ.
Да, да, точно с Nuget. Мне он не подошел, но там нестандартная ДЛЛ была для взаимодействия с Си-АПИ, + еще функции обратного вызова. Не знаю, почему-то мне запомнилось, что это компилятор, или то было другое решение.
А в данном случае, решение действительно хорошее и простое.
Почему же левый? Все делается штатными средствами VS. На Nuget есть библиотека DllExport, которая один раз модифицирует класс System.Runtime.InteropServices в составе сборки и далее все компилируется штатно. Так что никаких танцев с бубном не требуется, обертки не требуются. Создание форм намного проще в c#, чем прописывать их еще в дополнительном файле, как это предлагает Максим. Я уважаю Максима и его труд, но в данном случае нам открыт мир Net без дополнительных трудностей.
Это интересно, сами проверяли? Я в свое время делал связь МТ4 - C++dll - C#dll, напрямую загрузить C#dll не смог.
https://www.nuget.org/packages/DllExport/ - оно?
Я в предыдущем посте написал: все штатными средствами VS делается. Я использую VS 2017 Community. Просто в начале работы с проектом к нему подключается библиотека DllExport с Nuget. Ничего после компиляции проекта дорабатывать руками не требуется, от слова СОВСЕМ.
Шаблон от R.Giesecke не рекомендую. Вот с ним реальные танцы с бубном, если вообще получится запустить. С этой библиотекой вы даже разницы не почувствуйте. Ваша dll сама "станет native" в процессе обычной компиляции.
Тезка, можно подробнее? Задача для примера - сделать панель на C#, получающая инфу с советника и посылающая ему команды. Как для этого использовать dllexport?
Разжевывать не надо, просто шаги, что и как друг с другом реагирует?
Это интересно, сами проверяли? Я в свое время делал связь МТ4 - C++dll - C#dll, напрямую загрузить C#dll не смог.
https://www.nuget.org/packages/DllExport/ - оно?
Конечно проверял. Я же выше пример создания dll с формой привел.
Конечно проверял. Я же выше пример создания dll с формой привел.
Это картинка - пример?
Ясно, сам разберусь
Тезка, можно подробнее? Задача для примера - сделать панель на C#, получающая инфу с советника и посылающая ему команды. Как для этого использовать dllexport?
Разжевывать не надо, просто шаги, что и как друг с другом реагирует?
1. Создаем проект на c# Библиотека классов (net Framework)
2. Добавляем в проект библиотеку DllExport из NuGet. Лучше скачать с сервера. Положить батник в папку с проектом.
3. Запускаем через командную строку эту библиотеку (видео есть на хабе) и модифицируем класс System.Runtime.InteropServices.
На этом все подготовки закончены. Перезапускаем проект
4. Создаем экспортируемую функцию и перед ней прописываем модификатор [DllExport]ю При правильно выполненном шаге 3 компилятор не будет ругаться на модификатор
5. Добавляем в проект форму, оформляем как требуется.
6. Добавляем в класс экспортируемых функций (создан на шаге 1) функцию открытия формы, например Start
7. Создаем функцию открытия формы, например OpenDialog как это делается в функции main при создании приложения на windows form
8. В функции Start создаем поток, для которого указываем в качестве исполняемого метода функцию OpenDialog
9. Создаем советник/индикатор/скрипт и подключаем dll как обычно. ))
10 Вызываем из mql функцию Start
Форма запустится в отдельном потоке и не вызовет остановки процесса в mql, как это бы сделал обычный модальный диалог
Передача данных из mql в форму выполняется так же как передача данных между классами и потоками самого приложения.
1. Создаем в "экспортируемом" классе функцию, которую будет вызывать mql для передачи данных, например SendTick
Необходимо помнить что mql будет видеть только те методы классов (функции), у которых установлен модификатор [DllExport]
2. Создаем в этом классе делегат события с параметрами
3. В форме подписываемся на событие экспортного класса
4. При вызове метода SendTick из mql вызываем созданное событие, с передачей параметров
5. В форме "перехватываем событие" созданным обработчиком и выводим данные на форму, ну или что-то еще делаем.
Все. Больше ничего не требуется.
На всякий случай напомню что форма и экспортный класс работают в разных потоках, поэтому для размещения информации на форме потребуется делегат обработки данных из соседнего потока.
У кого получится, прошу поделиться "результатом" и впечатлениями от простоты. )))
Самым "сложным" во всем этом деле будет установка библиотеки. )))
Это картинка - пример?
Ясно, сам разберусь
Алексей, я подробно расписал. )) Если еще будут вопросы, спрашивай, постараюсь ответить!