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

 

Пример дан в анонсе https://www.metatrader5.com/ru/releasenotes/terminal/1898

MQL5

  1. Добавлена нативная поддержка .NET библиотек с "умным" импортом функций. Теперь библиотеки .NET можно использовать без написания специальных оберток — MetaEditor берет это на себя.

    Для работы с функциями .NET библиотеки достаточно импортировать саму DLL без указания конкретных функций. MetaEditor автоматически импортирует все функции, с которыми возможна работа:
    • Простые структуры (POD, plain old data) — структуры, которые содержат только простые типы данных.
    • Публичные статические функции, в параметрах которых используются только простые типы и структуры POD или их массивы

    Для вызова функций из библиотеки просто импортируйте ее:
    #import "TestLib.dll"
    
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       int x=41;
       TestClass::Inc(x);
       Print(x);
      }
    C# код функции Inc класса TestClass выглядит следующим образом:
    public class TestClass
    {
       public static void Inc(ref int x)
       {
        x++;
       }
    }
    В результате выполнения скрипт вернет значение 42.

    Работа над поддержкой .NET библиотек продолжается, в будущих версиях планируется расширить возможности их использования.

  2. В стандартную библиотеку добавлена поддержка работы с функциями WinAPI. Теперь для использования функций операционной системы в MQL5-программе нет необходимости вручную импортировать библиотеки и описывать сигнатуры функций. Достаточно подключить заголовочный файл из каталога MQL5\Include\WinAPI.

    Функции WinAPI сгруппированы в отдельных файлах по назначению:

    • libloaderapi.mqh — работа с ресурсами
    • memoryapi.mqh — работа с памятью
    • processenv.mqh — работа с окружением
    • processthreadsapi.mqh — работа с процессами
    • securitybaseapi.mqh — работа с системой безопасности ОС
    • sysinfoapi.mqh — получение системной информации
    • winbase.mqh — общие функции
    • windef.mqh — константы, структуры и перечисления
    • wingdi.mqh — работа с графическими объектами
    • winnt.mqh — работа с исключениями
    • winreg.mqh — работа с реестром
    • winuser.mqh — управление окнами и интерфейсом
    • errhandlingapi.mqh — обработка ошибок
    • fileapi.mqh — работа с файлами
    • handleapi.mqh — работа с хэндлами
    • winapi.mqh — подключение всех функций (заголовочных файлов WinAPI)

    Обвязка работает только с 64-битной архитектурой.


MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
  • 2018.10.26
  • MetaQuotes
  • www.metatrader5.com
Теперь вы можете выносить графики финансовых инструментов за пределы окна торгового терминала. Это удобно при работе с несколькими мониторами. Например, на одном можно расположить основное окно платформы и следить за состоянием счета, а на другом — графики для оценки ситуации на рынке. Чтобы отделить график от терминала, отключите опцию...
 
Nextor #:

Не работает:GuiController скачал с репозитория. Установил Visual Studio 2022, создал форму с кнопкой, запускаю в MetaTrader 5, получаю ошибку....


в Visual Studio community 2019 всё работает, как у автора,однако когда он пишет:

"Каждая форма имеет открытый список элементов, которая она содержит. Перебирая список элементов, метод находит те из них, что контроллер способен поддержать, и подписывается на нужные ему события. Если элемент на форме не поддерживается контроллером, то он просто будет проигнорирован. "

Увы, если разместить на тестовой форме SplitContainer или DataGridView, форма вообще не запускается не понятно почему, однако такой сложный компонент как Chart ЗАПУСКАЕТСЯ.

Прилагаю тестовый пример какие компоненты возможно использовать при доработке(хоть форма запускается!)

Файлы:
TESTGUIC.zip  706 kb
 

при попытке создать контроллер GuiController controller = new GuiController(assembly, form, m_global_events);
выдает Unexpected exception: Ключ с таким именем уже существует (для DataGridView) и контроллер НЕ СОЗДАЕТСЯ(форма же создается, наверное ее можно показать,но без контроллера как управлять?)

еще раз все ОК если нет компонентов SplitContainer и/или DataGridView

 
Nikolai Karetnikov #:

может кто еще споткнется

вот это место в статье

"Как видите, компилятор понимает внешние перечисления определенные в Net-библиотеках и умеет с ними работать." 

Не знаю пока по какой причине, но компилятор упорно отказывается понимать C# перечисления, поэтому тащим enum из C# в Mql5 и все работает. 

Только, Василий, вы в торговой панельке кнопки Buy и Sell расположили наоборот ))

А вообще, крутейшая штука получилась. Спасибо вам за труд! )

У меня возникла та же проблема.

Я эту проблему решил немного по-другому - вместо ClickOnElement написал GuiEventType::ClickOnElement. И после этого компилируется и работает без проблем. Но если всё обстоит именно так, то действительно непонятно, как это работало у Василия. Возможно я что-то не так сделал...

Ну а в остальном вещь действительно нужная и полезная. Жаль, что в MQL5 нет чего-то подобного (встроенного).

 
MQL_User #:

У меня возникла та же проблема.

Я эту проблему решил немного по-другому - вместо ClickOnElement написал GuiEventType::ClickOnElement. И после этого компилируется и работает без проблем. Но если всё обстоит именно так, то действительно непонятно, как это работало у Василия. Возможно я что-то не так сделал...

Ну а в остальном вещь действительно нужная и полезная. Жаль, что в MQL5 нет чего-то подобного (встроенного).

У меня была такая ошибка:

@MQL_User, cделал как вы: " ...вместо ClickOnElement написал GuiEventType::ClickOnElement"  - все заработало! 

 
Mano параметров.

Для MT4 это не работает. Я пробовал, но безрезультатно.

 
Pete #:

Я относительный новичок в MQL5 и многое узнал из этой статьи! Спасибо большое!


У меня есть один вопрос. Последние 2 дня я пытаюсь разобраться с тем, что написано ниже.


Я успешно выполнил каждый шаг несколько раз, даже на другом компьютере, но каждый раз, когда я пытаюсь скомпилировать код, я получаю сообщение об ошибке.


Компилятор MQL выдает сообщение : "Undeclared Identifier" для любого из перечислений ниже.


Если я "закомментирую" эти перечисления из MQL5, то все будет работать, что интересно, так как это означает, что код работает, но не может прочитать перечисления, что я и предполагаю?

Если кто-то сможет мне помочь, я буду очень признателен :)


Спасибо,

Я читал, что в MQH-файле нужно объявлять перечисления точно так же, как они были объявлены в DLL.

 
Mano параметров.

string ReceiveEvent(int event_n); // Returns JSON string.. Use JAson.mqh to Deserialize objects

Как мне использовать это внутри OnTimer()?

Я использую тот же подход, что и в статье.

void OnTimer()
{
   CJAVal data;
   
   for(static int i = 0; i < EventsTotal(); i++)
   {
      data.Deserialize(ReceiveEvent(i));
      Print(data.["id"].ToStr());
        
   }   
}


Мой вопрос: какой int мне нужно передать внутри функции ReceiveEvent?
Извините за мое невежество, но я не понимаю.
 
Здравствуйте!!! Очень полезная статья, так как мы можем интегрировать dot net приложение в MT5/4.
Большое спасибо автору.

Я привык не к c#, а к vb. Я пытался создать форму с помощью vb dot net и разместить ее в терминале MT5, но не получилось.

Может ли кто-нибудь помочь мне?
Этот коннектор поддерживает только c#?
Есть ли шанс работать с vb.net?
Буду признателен за помощь.
Заранее спасибо.
 

Подскажите, пожалуйста, что не так с программой GuiMtController.mq5, которая сообщает об ошибке при запуске?

'GuiMtController.mq5'
ClickOnElement'-необъявленный идентификатор
1 ошибка, 0 предупреждений
Файлы:
k9un.jpg  160 kb