文章 "基于 .Net 框架和 C# 为 EA 交易和指标开发图形界面" - 页 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"
    
    //+------------------------------------------------------------------+
    //| 脚本程序启动功能|
    //+------------------------------------------------------------------+
    void OnStart()
      {
       int x=41;
       TestClass::Inc(x);
       Print(x);
      }
    TestClass 类的 Inc 函数的 C# 代码如下所示:
    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 Visual Studio 2022,创建了一个带按钮的表单,在 MetaTrader 5 中运行时,出现错误:....

在 Visual Studio community 2019,一切都与作者所做的一样,但当他写道

"每个表单都有一个包含元素的公共列表。通过元素列表,该方法会找到控制器能够支持的元素,并订阅所需的事件。如果控制器不支持表单中的某个元素,它就会被忽略。"

唉,如果在测试表单上放置一个 SplitContainer 或 DataGridView,表单根本不会启动,原因不明,但像图表这样复杂的组件却启动了。

我附上一个测试示例,说明可以使用哪些组件进行修改(尽管表单启动了!)。

附加的文件:
TESTGUIC.zip  706 kb
 

当尝试创建控制器时,GuiControllercontroller= new GuiController(assembly, form, m_global_events);
出现意外异常:具有此名称的键已经存在(对于 DataGridView),并且控制器没有创建(创建了窗体,可能可以显示窗体,但没有控制器如何控制窗体?)

同样,如果没有 SplitContainer 和/或 DataGridView 组件,则一切正常。

 
Nikolai Karetnikov #:

也许别人会绊倒

这是文章中的位置

"正如您所看到的,编译器可以理解在 Net 库中定义的外部枚举,并知道如何与它们一起工作"。

不知道是什么原因,编译器顽固地拒绝理解 C# 的枚举,所以我们把 C# 中的枚举拖到 Mql5 中,一切正常。

只是,瓦西里,你把交易面板中的买入和卖出按钮放反了 )))

但总的来说,这已经是最酷的事情了。感谢您的辛勤工作!)

我也遇到了同样的问题。

我的解决方法有点不同--我写了 GuiEventType::ClickOnElement,而不是 ClickOnElement。这样编译和运行就没有任何问题了。但如果是这样的话,就不清楚 Vasily 是如何做到的了。也许我做错了什么

但除此之外,这个东西真的很有必要,也很有用。可惜 MQL5 没有类似的功能(内置)。

 
MQL_User #:

我也遇到过同样的问题。

我用了一种不同的方法来解决这个问题--我写了 GuiEventType::ClickOnElement,而不是 ClickOnElement。之后,编译和运行都没有任何问题。但如果是这样的话,就不清楚 Vasily 是如何做到的了。也许我做错了什么

但除此之外,这个东西真的很有必要,也很有用。可惜 MQL5 没有类似的功能(内置)。

我就遇到过这样的错误:

@MQL_User,我按照你的方法做了:"......写GuiEventType::ClickOnElement,而不是ClickOnElement" - 一切正常!

 
Mano 参数 进行 marshalling。

这对 MT4 无效。我试过了,但没有任何结果。

 
Pete #:

我是 MQL5 的新手,从这篇文章中学到了很多!非常感谢!


我有一个问题。在过去的两天里,我一直在苦苦思索下面这个问题。


我甚至在另一台电脑上也成功完成了几个步骤,但每次当我尝试编译代码时,都会收到一条错误信息。


MQL 编译器指出 :下面任何枚举的 "未声明标识符"。


如果我将这些枚举从 MQL5 中 "注释 "掉,它就会相应地工作,这很有趣,因为这意味着代码可以工作,但无法读取枚举,这是我的猜测吗?

如果有人能帮助我,我将不胜感激 :)


谢谢、

我读到您需要在 MQH 文件中以与 DLL 中完全相同的方式声明枚举。

 
Mano 参数 进行 marshalling。

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());
        
   }   
}


我的问题是:我需要在 ReceiveEvent 函数中传递什么 int?
抱歉我的无知,但我不明白。
 
你们好这篇文章非常有用,因为我们可以将 dot net 应用程序集成到 MT5/4 中。
非常感谢作者。

我用的不是 c#,而是 vb。我试图用 vb dot net 创建一个表单,并将其添加到 MT5 终端,但失败了。

谁能帮帮我?
这个连接器只支持 c# 吗?
有没有可能使用 vb.net?
感谢您的帮助。
非常感谢。
 

请教一下,运行时GuiMtController.mq5程序报错,是什么问题?

'GuiMtController.mq5'
ClickOnElement'-undeclared identifier
1 errors,0 warnings
附加的文件:
k9un.jpg  160 kb