讨论 "如何在10分钟内为MQL5编写一个DLL并交换数据"。 - 页 2

 
我还没有在MQL5中测试过将字符串传递给dll的一件事

我注意到MQL4-DLL中字符串传递的这个问题。在MQL4代码中,我调用 DLL中的函数 并传递字符串。

#import "MyDll.dll"
 void passSymbol(string symb);






void start() {

    passSymbol(Symbol());

}

而在dll中,我收到这个带有工具名称的字符串。

_DLLAPI int __stdcall passSymbol(char* symbol) {
   указатель symbol в какой-то момент не содержит имени инструмента а левые символы вообще.
}


在某一时刻,在某些勾选中(可能运行了半天都很好),dll突然收到一个左手的字符串,其中有不清楚的字符,而不是符号名称。
也许你可以在mql5中查看类似的代码?在MQL4中,内存指针似乎是不正确的,或者有时对终端内部的流线的访问有冲突。

双重数组和int变量可以正常通过,没有任何问题。

我将为MQL5-DLL写一个测试,但如果你也在测试这些东西,请写一个这样的测试来验证字符串传递给dll的稳定性,通过在很长一段时间内重复每一个刻度的过程。

 
GarF1eld:

如果只能通过dll导出报价,那么就意味着要在每个要导出的工具上放置一个脚本?如果有很多这样的人呢?例如,50?

我知道可以在一个脚本中传递许多工具的报价,但它不会完全替代DDE,因为在DDE中不会丢失点数。

雷纳特

问题是,我们没有 "提供报价的接口 "的任务。

我们的任务是为开发分析系统创造一个完整的、自给自足的环境。这样的环境,以至于连第三方程序都不需要使用。

答案当然是有趣的。题目 "如何为MQL5编写DLL并 在10分钟内交换数据"值得看看这篇文章"指标之间的数据传输 - 一个痛苦问题的简单解决方案",并与上述问题进行比较(斜体)。
 
Renat:

问题是,我们的任务不是 "提供一个发布报价的接口"。

我们的任务是为分析系统的开发创造一个完整和自给自足的环境。这样的环境,即使是第三方程序也没有太多使用的必要。


GUI非常弱--花了2天时间编写逻辑,花了一整天时间以任何方式显示计算的信息。

结果是我禁用了一切--我建立了数据传输(https://www.mql5.com/ru/forum/382),现在很高兴。

开发商的目标是不是定得太高了?

如果一切都在很久以前就已经完成了(C、Delphi......),为什么还要重新发明车轮呢?

 
yu-sha:

GUI非常弱--我花了2天时间来写逻辑,花了一整天时间来以任何方式显示计算的信息

最后我放弃了一切--我建立了数据传输(https://www.mql5.com/ru/forum/382),并在享受我的生活。

开发商的目标是不是定得太高了?

为什么要重新发明轮子,因为一切都已经在很久以前完成了(C、Delphi...)?

IMHO,MT5的问题始于它的诞生:对这个产品要解决的问题缺乏清晰的认识。它要么是基于MT4的升级版,但在速度和扩展功能方面提高到了新的版本,要么是一个新的现代交易平台,具有深思熟虑的结构和可扩展性(即包含业务类,或交易框架,以执行明确定义的具体任务类别,并基于一些现代编程语言/环境的一般功能和广泛可用的软件支持工具)。为了解决这个难题,试图把对立面结合起来,通过 "最有才华的独唱者的即兴表演 "的方法,酝酿出一种可以说是复合的东西,似乎并没有完全成功。

如果有人认为这是纯粹的垃圾,没有建设性的影子,那就第二次把他带到澡堂去,或者把他枪毙了算了。)

 

2个pisara

找到它的根源。

MQL更适合没有什么编程技能的交易者。A la Basic for dummies。

我并不反对这样的立场--也感谢你的说法。

但将MQL5定位为"开发分析系统的一个完整和自给自足的环境这是一种甚至不需要应用第三方程序的环境。" 这是个严肃的请求。这将需要多年的工作,不仅仅是个人爱好者,而是在一个好的架构师指导下的专业程序员团队,用一些可消化的汤集来 "绑定 "核心。对于预算和管理,我不能说什么--那是项目的另一个层面。

我想支持公司员工的辛勤工作。我想对他们的辛勤工作说声谢谢。但让我们面对现实吧--MQL5只是实现目标的一个阶段。

P.S. 莫斯科不是在一天之内建成的

 
是的,想到或想起我们每个人已经做了、正在做和将继续做的多少不必要的事情,就会感到害怕!这就是我们的生活。
 
Renat:

检查通话速度非常容易。例如,你可以粗略地这样计算。

我在Quad Q9400 @2.66Ghz上得到每秒57,000次呼叫。同样的代码在MetaTrader 4中每秒可以得到约20,000,000次调用,因为没有控制和管道。

我们一定会努力减少MetaTrader 5中DLL调用的损失。

最好给编译器做一个特殊的指令,默认情况下启用,并将这些包装器插入到DLL调用中。当禁用时,最好不要插入这些包装器。像调试和发布模式。不过,有时57K是不够的。同样的时间也被dll的运行时间所吞噬。
 
HideYourRichess:
做一个特殊的编译器指令是个好主意,该指令默认为开启,并将这些包装器插入dll调用中。当禁用时,最好不要插入这些包装器。像调试和发布模式。不过,有时57K是不够的。同样的时间被dll的运行时间吃掉了。
240的构建简化了包装器,现在的呼叫率是每秒19,911,000次。
 
关于MQL / MQL2 / MQL4 / MQL5的讨论:显然,你不太了解我们的历史。至少要去公司网站上看一下。


自2001年以来,我们有条不紊地创造了4代交易语言,拥有一个庞大的交易员社区。竞争对手正在死亡,他们的控制语言没有发展,而我们已经工作,正在工作,并将继续工作。

 

Renat: 

我们一直在努力,正在努力,并将继续努力。

正如伟大的列宁爷爷所遗留的。

;)

我不记得了,我想我以前问过...
是否可以使用mcl5工具创建简单的dlls。
用unitor写,然后编译......?