在图形模式下为MQL创建一个GUI。 - 页 5

 

下面是一个用EA在10分钟内用夏普画出的简单表格的例子。该表格从图表中接收刻度,直接从EA接收,就像从本地dll接收一样,没有套接字、文件和其他东西。而这个表格是附在图表上的。附件有一些问题,必须解决。但也可以不附加,随你喜欢。

 
Алексей Барбашин:

下面是一个用EA在10分钟内用夏普画出的简单表格的例子。该表格从图表中接收刻度,直接从EA接收,就像从本地dll接收一样,没有套接字、文件和其他东西。而这个表格是附在图表上的。附件有一些问题,必须解决。但它不能被附加--无论你喜欢什么。

告诉我你用的是GitHub上的哪个编译器。还是你用手编辑了锐利的编译?我不需要它。用混合代码(托管+非托管)编写C++ DLL比较容易。

 
Yuriy Asaulenko:

告诉我你用的是GitHub上的哪个编译器。还是你用手编辑了sharded编译?不是一个好主意。用混合代码(托管+非托管)编写C++ DLL比较容易。

我在上一篇文章中写道:一切都用VS内部工具完成。我正在使用VS 2017社区。就在项目的开始,带有Nuget的DllExport库被连接到了它。从TOTALLY这个词来看,没有任何东西需要在编译项目后手动敲定。

我不推荐R.Giesecke 的模板。这里有一个真正的手鼓,如果有的话,就有可能开始。有了这个库,你甚至感觉不到有什么不同。在正常的编译过程中,你的dll本身会 "变成本地"。

 
Алексей Барбашин:

我在上一篇文章中写道:一切都用VS内部工具完成。我正在使用VS 2017社区。就在项目的开始,带有Nuget的DllExport库被连接到了它。从EVERYTHING这个词来看,没有什么东西需要在编译项目后用手来敲定。

是的,是的,正是用Nuget。这对我来说并不奏效,但有一个非标准的DLL用于与C-API互动,+更多回调函数。我不知道,出于某种原因,我记得它是一个编译器,或者那是一个不同的解决方案。

而在这种情况下,解决方案真的很好很简单。

 
Алексей Барбашин:

为什么是左边的?一切都是用VS的内部工具完成的。Nuget有DllExport库,它对System.Runtime.InteropServices类进行了一次修改,然后一切就可以正常编译了。因此,不需要跳手鼓舞,也不需要包装纸。在c#中创建表单要比像Maxim建议的那样把它们写在一个额外的文件中容易得多。我尊重马克西姆和他的工作,但在这种情况下,网络世界对我们是开放的,没有任何额外的困难。

这很有趣,你自己检查过吗?我曾经做过MT4-C++dll-C#dll的连接,我不能直接加载C#dll。

https://www.nuget.org/packages/DllExport/ 是吗?

DllExport 1.6.0
DllExport 1.6.0
  • www.nuget.org
The open implementation of unmanaged exports for .NET ( DllExport )        Source code and all details here: https://github.com/3F/DllExport                To configure projects via current package:        ========================================================        DllExport -action Configure -dxp-version 1.6.0...
 
Алексей Барбашин:

我在上一篇文章中写道:一切都用VS内部工具完成。我正在使用VS 2017社区。就在项目的开始,带有Nuget的DllExport库被连接到了它。从TOTALLY这个词来看,没有什么东西需要在编译项目后手动敲定。

我不推荐R.Giesecke 的模板。这里有一个真正的手鼓,如果有的话,就有可能开始。有了这个库,你甚至感觉不到有什么不同。在正常的编译过程中,你的dll将 "变成本地"。

Tzek,你能详细说明一下吗?这个例子的任务是在C#中制作一个面板,从EA获取信息,并向其发送命令。如何使用dllexport来处理这个问题?

不需要拼出来,只需要步骤,什么和如何相互反应?

 
Alexey Volchanskiy:

这很有趣,你自己检查过吗?我以前做MT4-C++dll-C#dll链接,不能直接加载C#dll。

https://www.nuget.org/packages/DllExport/ 是吗?

我当然检查了。我在上面举了一个用表格创建dll的例子。

 
Алексей Барбашин:

我当然会这样做。我在上面举了一个带表格的dll的例子。

这张照片是一个例子吗?

好吧,我自己来处理。

 
Alexey Volchanskiy:

特兹卡,你能详细说明一下吗?这个例子的任务是用C#做一个面板,从EA获取信息并发送命令。如何使用dllexport来处理这个问题?

不需要拼写,只需要步骤,什么以及如何相互反应?

1.在c#类库(net框架)中创建一个项目

2.将NuGet的DllExport库添加到项目中。最好是从服务器上下载。把批处理文件放在项目文件夹中。

3.我们通过命令行启动库(集线器上有一个视频),并修改了System.Runtime.InteropServices类。

至此,所有的准备工作都已完成。重新启动项目

4.创建一个导出函数 并在其前面添加[DllExport]y修饰符。 如果正确执行了步骤3,编译器将不会抱怨修饰符的问题

5.将该表格添加到项目中,并按要求进行编排。

6.在导出的函数类中添加(在步骤1中创建)打开表单的功能,例如,开始

7.创建打开窗体的函数,例如OpenDialog,正如在windows窗体上创建应用程序时在主函数中所做的那样。

8.在Start函数中,创建一个线程,我们指定OpenDialog函数为可执行方法。

9.创建一个EA/指示器/脚本,像往常一样连接dll。))

10.从mql中调用Start函数

该表单将在一个单独的线程中启动,不会像普通的模态对话框那样在mql中停止进程。

从mql到表单的数据传输与应用程序本身的类和线程之间的数据传输方式相同。

1.在一个要导出的类中创建一个函数,该函数将被mql调用以传输数据;例如,SendTick。

记住,mql只会看到那些安装了[DllExport]修改器的类方法(函数)。

2.在该类中创建一个带有参数的事件代理

3.在表单中,我们需要订阅导出类的事件

4.当从mql中调用SendTick方法时,我们调用创建的事件并传递参数

5.在表单中,我们创建一个事件处理程序,拦截事件并将数据发送到表单中,或做其他事情。

这就是全部。没有其他要求。

万一表单和导出类在不同的线程中工作,那么为了把信息放到表单上,我们需要一个来自邻近线程的数据处理委托。

如果你成功了,请分享 "结果 "和对简单性的印象。)))

所有这些中最 "困难 "的将是图书馆的安装。)))

 
Alexey Volchanskiy:

这张照片是一个例子吗?

我明白了,我自己会想办法的。

阿列克谢,我已经详细介绍了图片。))如果你有更多的问题,请问我,我将努力回答他们

原因: