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

 

слегка улучшенная версия советника TradePanel

В заголовке формы название инструмента [1], вместо надписи продать и купить на кнопках текущие котировки [2], а сами формы 'уже [3] и "прилипают" к границам экрана. Прилипание - сторонний софт  https://www.nurgo-software.com/products/aquasnap 

Если бы кто добавил в сам .sln функцию примагничивания, было бы вообще здорово

При запуске советника он спросит, где лежит TradePanel.dll, чтобы не указывать это в коде


Window docking
Window docking
  • www.nurgo-software.com
Split your desktop in one easy gesture Drag and drop your windows to the sides or corners of the screen, and they'll automatically be resized to fit one half or one quarter of the screen. This feature is just like the built-in Aero Snap function of Windows 10 , but with more possibilities! This is especially useful on either a 4K monitor or...
Файлы:
TradePanel.zip  74 kb
 
Nikolai Karetnikov:

Rafil, разобрались в чем была проблема?

решил также как вы, добавил перечисление  в mql 

 

Приветствую. Подскажите, пожалста. Что я делаю не так? При включении советника форма не появляется. Ошибок в журнале нет.



 
Andrey Sokolov #:

Приветствую. Подскажите, пожалста. Что я делаю не так? При включении советника форма не появляется. Ошибок в журнале нет.



Привет! А для какой версии .NET собрана библиотека и приложение с формой? MT4 и MT5 не поддерживают .NET Core 3(младшие версий не проверял), .NET 5 и .NET 6, ни для библиотеки ни для приложения с формой.
Конечно могу ошибаться но у меня тоже не запускалась форма на этих версиях. Сам смог запустить при сборке под .NET Framework 4.8

Так же если вы пытаетесь импортировать в МT4 то там требуется немного изменить код библиотеки, т.к. есть проблемы с передачей параметров по ссылке.

 

Не работает:

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

2022.03.16 19:22:44.629    TradeAssistant (EURUSD_i,M5)    System.Reflection.TargetInvocationException: Адресат вызова создал исключение. ---> System.BadImageFormatException: Ожидалось, что модуль содержит манифест сборки. (Исключение из HRESULT: 0x80131018)
2022.03.16 19:22:44.629    TradeAssistant (EURUSD_i,M5)       в System.Reflection.RuntimeAssembly.nLoadFile(String path, Evidence evidence)
2022.03.16 19:22:44.629    TradeAssistant (EURUSD_i,M5)       в System.Reflection.Assembly.LoadFile(String path)
2022.03.16 19:22:44.629    TradeAssistant (EURUSD_i,M5)       в MtGuiController.GuiController.GetGuiController(String assembly_path, String form_name)
2022.03.16 19:22:44.629    TradeAssistant (EURUSD_i,M5)       в MtGuiController.GuiController.ShowForm(String assembly_path, String form_name)
2022.03.16 19:22:44.629    TradeAssistant (EURUSD_i,M5)       --- Конец трассировки внутреннего стека исключений ---
2022.03.16 19:22:44.629    TradeAssistant (EURUSD_i,M5)       в System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
2022.03.16 19:22:44.629    TradeAssistant (EURUSD_i,M5)       в System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
2022.03.16 19:22:44.629    TradeAssistant (EURUSD_i,M5)       в System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
2022.03.16 19:22:44.629    TradeAssistant (EURUSD_i,M5)       в Wrapper.Wrapper.Call(MethodInfo method, Int64 owner, Int64 parameters, Int64 result)
2022.03.16 19:22:44.629    TradeAssistant (EURUSD_i,M5)    .Net runtime error


Результат команды clrver:

PS C:\Development\Visual Studio Community 2022\C Sharp\GuiMt> clrver

Microsoft (R) .NET CLR Version Tool  Version 4.8.3928.0

Copyright (c) Microsoft Corporation.  All rights reserved.

Versions installed on the machine:

v2.0.50727

v4.0.30319


С чем может быть связана ошибка?

 
Nextor #:

Не работает:

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

2022.03.16 19:22:44.629    TradeAssistant (EURUSD_i,M5)    System.Reflection.TargetInvocationException: Адресат вызова создал исключение. ---> System.BadImageFormatException: Ожидалось, что модуль содержит манифест сборки. (Исключение из HRESULT: 0x80131018)
2022.03.16 19:22:44.629    TradeAssistant (EURUSD_i,M5)       в System.Reflection.RuntimeAssembly.nLoadFile(String path, Evidence evidence)


Результат команды clrver:

PS C:\Development\Visual Studio Community 2022\C Sharp\GuiMt> clrver

Microsoft (R) .NET CLR Version Tool  Version 4.8.3928.0

Copyright (c) Microsoft Corporation.  All rights reserved.

Versions installed on the machine:

v2.0.50727

v4.0.30319

С чем может быть связана ошибка?

GuiController устарел и требует перекомпиляции.

 

С октября 2018 года MQL5 стал нативно поддерживать интеграцию с библиотеками Net Framwork

Добрый день. Подскажите пожалуйста, где можно почитать официальную информацию о поддержке C#. В документации что-то не нашел такого, есть информация по подключению VS, по использованию MT как компилятора, по работе с Питоном, но по шарпу инфы не увидел. Буду признателен за ссылочку на официальную доку, чтобы ознакомиться со всеми возможностями.

 

Пример дан в анонсе 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

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