Обсуждение статьи "Создание графических интерфейсов для экспертов и индикаторов на базе .Net Framework и C#" - страница 5

 
Igor Makanu:

в статье указан совсем другой способ взаимодействия МТ5 с "внешним миром", Вам нужно в коде МТ5 описать сигнатуры функций С++ и вызывать как обычную dll, вот рабочий пример, я проверял месяц назад 

https://www.mql5.com/ru/articles/18

ЗЫ: tensorflow c# отлично гуглится, вот готовые решения под C#  https://nugetmusthaves.com/Tag/tensorflow 

Хорошая статья, возьму на заметку, спасибо!

То, что tensorflow c# отлично гуглится я и так знаю, просто мне не хочется тратить время на изучение C#, поэтому я интегрирую tensorflow с С++.

Вопрос мой был не в этом.

Чем все таки различается описанный в статье способ взаимодействия от обычного? В тексте написано, что для этого просто достаточно, чтобы dllка была написана на платформе .Net. Но чтобы писать на этой платформе, не обязательно использовать C#. Но, когда я использую C++/CLR (а Visual Studio подсказывает, что получается приложение с .Net-классами), MQL5 все равно требует декларировать функции из получившейся dllки как обычно, а классы не видит вообще.

 

Можно ли отправить строку из Visual Studio в MT5? Как я могу это сделать?


Спасибо за помощь

 
AikAcrobatt:

Чем все таки различается описанный в статье способ взаимодействия от обычного? В тексте написано, что для этого просто достаточно, чтобы dllка была написана на платформе .Net. Но чтобы писать на этой платформе, не обязательно использовать C#. 

именно на C# должна быть dll, если не ошибаюсь тот метод который был применен в статье называется  инжекция С# - погуглите, тут я не помощник, как происходит взаимодействие между C# и MQL5, как вариант "покрутите" пример https://www.mql5.com/ru/forum/303283/page3#comment_10607873

Обсуждение статьи "Создание графических интерфейсов для экспертов и индикаторов на базе .Net Framework и C#"
Обсуждение статьи "Создание графических интерфейсов для экспертов и индикаторов на базе .Net Framework и C#"
  • 2019.02.12
  • www.mql5.com
Опубликована статья Создание графических интерфейсов для экспертов и индикаторов на базе .Net Framework и C#: Автор: Vasiliy Sokolov...
 
fxsaber:

Реально показать пример использования, например, этой библиотеки?

Библиотека интересная. Думаю ее вполне реально интегрировать с движком.

 
AikAcrobatt:

Здравствуйте! Отличная статья!

В связи с изложенным возник ряд вопросов:

1) Из текста статьи у меня создалось впечатление, что подобным же образом можно организовать не только графические интерфейсы, но и реализацию почти любого API, которое "не влезает" в MQL5.

Да, совершенно верно. В статье по сути описывается модифицированный паттерн проектирования MVC. Паттерны универсальны и не зависят от языковых средств и задач, главное что бы концепция 'модель-представление-контроллер' хорошо вписывалась в задачу. 

AikAcrobatt:

Вопрос мой в том, можно ли написать .Net библиотеку на C++ (я так понимаю с использованием C++/CLR) так, чтобы MQL5 расбирался в ее .Net коде так же как в вашем движке GuiController? ...

2) Теоретически можно. Net dll это упакованный CIL в который транслируют языки высокого уровня вроде C#, VB Net, C++ Net. Т.е. вроде без проблем MQL должен читать dll net не зависимо от того, на каком языке она была написана. Вот только как это будет на практике нужно проверять, потому что разработчики явно закладывались на C#

AikAcrobatt:

Практический пример, который меня интересует вот такой. Сейчас существуют возможности интегрирования опенсорсных библиотек по машинному обучению с VS2017, причем например TensorFlow предоставляет API и на C++ c поддержкой вычислений на GPU. Ваша статья предоставляет прекрасную возможность интегрировать C++ реализацию TensorFloW (или любой другой библиотеки машинного обучения) непосредственно в MQL5, что кажется мне очень удобным. Проблема в том, что почему то мне не удается даже пробную dll на C++ импортировать в MQL5 указанным здесь способом.

Имеется в виду Net C++ dll? Если да, нужно проверять и смотреть. Как оно будет крутиться в реальности понять сложно.

Но вообще Вы очень верно подметили: за быстрой интеграцией с существующим кодом однозначно будущее. И жизни не хватит что бы все самому пилить. А тут взял, скачал что нужно и вперед. 

 
AikAcrobatt:

...

Чем все таки различается описанный в статье способ взаимодействия от обычного? В тексте написано, что для этого просто достаточно, чтобы dllка была написана на платформе .Net. Но чтобы писать на этой платформе, не обязательно использовать C#. Но, когда я использую C++/CLR (а Visual Studio подсказывает, что получается приложение с .Net-классами), MQL5 все равно требует декларировать функции из получившейся dllки как обычно, а классы не видит вообще.

Вот это очень странно, потому что конкретно с C# все совсем по-другому работает. MQL отлично видит и Net классы и их методы с сигнатурами. Даже intellisense в MetaEditor работает.

Я в С++ к сожалению почти не шарю. Рад бы помочь, но боюсь не смогу.

 
Norton Daniel Barth:

Можно ли отправить строку из Visual Studio в MT5? Как я могу это сделать?

Спасибо за помощь

Да, конечно. Строку можно вернуть из метода (строка 1). Также строку можно вернуть по ссылке (строка 3):

string line = SharpClass::GetSting();
string line_l;
SharpClass::GetStringByLink(line_l);

Где SharpClass - статический класс C# в Вашем сборке. 

 
Vasiliy Sokolov:

Вот это очень странно, потому что конкретно с C# все совсем по-другому работает. MQL отлично видит и Net классы и их методы с сигнатурами. Даже intellisense в MetaEditor работает.

Я в С++ к сожалению почти не шарю. Рад бы помочь, но боюсь не смогу.

У меня к настоящему моменту получилось следующее:

Простейшая dllка на C++ с использованием .NET:

using namespace System;

namespace TesterMQL54 {
        public ref class Class1
        {
        public: static int Func1(int arg) { return (arg - 1); };
        };
}

Эта библиотека взаимодействует с MQL5 так же как подобная на C# (я проверил) и аналогично описанному в Вашей статье.
Когда вставляем в MQL5 программу:

#import "TesterMQL5_4.dll"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   Print("Beg");
   Print(Class1::Func1(7));
   Print("End");
  };
//+------------------------------------------------------------------+


Все компилируется, компилятор видит класс Class1 и функцию Func1. Но в отличие от шарповского поведения, терминал говорит, что не удается загрузить dll:

Cannot load 'C:\Users\...\MQL5\Libraries\TesterMQL5_4.dll' [0]

EX5 loading failed.



 
Vasiliy Sokolov :

Yes of course. The string can be returned from the method (string 1). You can also return the string reference (row 3):

Where SharpClass is a static C # class in your assembly. 

Спасибо за помощь, но мне нужно больше узнать о C #, я действительно могу заставить эту простую вещь работать или включить код


Еще раз спасибо за ваше время

 
AikAcrobatt:

У меня к настоящему моменту получилось следующее:

Простейшая dllка на C++ с использованием .NET:

...

Вставляйте пожалуйста код правильно:


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