文章 "基于 .Net 框架和 C# 为 EA 交易和指标开发图形界面" - 页 11

 

great work!

sometimes the MT5 will crash when i close a form, of course, there is a unhandled exception, but i don't know where is the code and can't catch it.

do you have any ideas? thank you.

 
Artur Zas:

示例中的代码是专门针对 WinForms 的,但您可以很容易地将其修改为用于 WPF。您只需在 WPF 外壳端绑定不同的事件即可。代码会有些不同,但原理是一样的。

如果只将 WinForms 窗口作为 XAML 控件的宿主,也可以按原样使用代码。您可以使用新的XAML Islands 来 做到这一点。这样,您就可以在 WinForm 中使用所有现代 UWP 控件。

我们怎样才能做到第一点呢?因为我正试图在Visual Studio 程序中包含窗口类,而不是窗体,但这行不通。或者您知道其他能与 MQL5 和 WPF 一起使用的 .dll 吗?
 

下午好!不知道为什么编译不成功,我做错了什么? 我把 MtGuiController.dll 文件放到了库文件夹中。


 
版權所有©2020 ®kwancheetuck保留所有權利通过.存款擁有權 MQL5
 
Vasiliy Sokolov:

我想向太空发射飞船。我有很多想法,但也无从下手。

总的来说,这很容易理解:下载工作室很难,但自己编写 XAML 解释器--这没什么,但我就是搞不定。

))

 
Rafil Nurmukhametov:

下午好!不知道为什么编译不成功,我做错了什么? 我把 MtGuiController.dll 文件放到了库文件夹中。


拉菲尔,你找到问题所在了吗?

 
#import  "MtGuiController.dll"
string assembly = "C:\\MT5\\Form1.exe";

//+------------------------------------------------------------------+
//| 专家初始化函数|
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 创建计时器
   GuiController::ShowForm(assembly, "Form1");
   EventSetMillisecondTimer(200);   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 专家去初始化函数|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- 销毁计时器
   printf("enter deinit");
   GuiController::HideForm(assembly, "Form1");
   printf("exit deinit");
   EventKillTimer();
   
  }
//+------------------------------------------------------------------+
//| 专家勾选功能|
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
//| 定时器功能|
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   for(static int i = 0; i < GuiController::EventsTotal(); i++)
   {
      int id;
      string el_name;
      long lparam;
      double dparam;
      string sparam;
      GuiController::GetEvent(i, el_name, id, lparam, dparam, sparam);
// if(id == ClickOnElement)
      if(id == 9)
         printf("Click on element " + el_name);
   }
  }
//+------------------------------------------------------------------+

@Vasiliy Sokolov,你能帮我理解一下吗?

以 GuiMtController.mq5 为例,将库放在 Libraries 中,.exe 放在 c:\\MT\\\\,并相应地定义程序集。

编译后,我们得到一条关于未定义 ClickOnElement 变量的消息。比方说,我们用任意整数替换它 -> 编译正常,但表单本身无法启动。当然,dlls 是允许的,Metaeditor 版本 2361

 

也许别人会偶然发现

这里是文章中的地方

"正如你所看到的,编译器可以理解在 Net 库中定义的外部枚举,并知道如何使用它们"。

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

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

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

Документация по MQL5: Основы языка / Типы данных / Целые типы / Перечисления
Документация по MQL5: Основы языка / Типы данных / Целые типы / Перечисления
  • www.mql5.com
После объявления перечисления появляется новый целочисленный 4-байтовый тип данных. Объявление нового типа данных позволяет компилятору строго контролировать типы передаваемых параметров, так как  перечисление вводит новые именованные константы. В приведенном примере именованная константа January имеет значение 0, February имеет значение 1...
 
Nikolai Karetnikov:

也许别人会绊倒

这是文章中的位置

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

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

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

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

等待兴奋。检查表格是否有效。这个问题仍然不清楚。在高频率输出数据时,会出现巨大的延迟。
 
Реter Konow:
等待兴奋。检查表格是否正常工作。这个问题仍然不清楚。在高频率输出数据时,会出现巨大的延迟。

下午!)

彼得,你说的 "被 "和 "高 "是什么意思?关于这个问题,我们曾在某个地方讨论过。