#import "MQL5DLLSamples.dll"void fnCrashTest(int arr);
#import//--- вызовем креш (среда исполнения перехватит исключение и не даст упасть терминалу)
fnCrashTest(NULL);
Print("Этого текста не увидите!");
//---
因此,将有一个试图写进零地址的尝试,并产生一个异常。终端将拦截它,在日志中报告并继续其工作。
MQL5DLL Test (GBPUSD,M1) 20:31:12 Access violation write to 0x00000000
Сидят двое нищих. Перед каждым из них шляпа и надпись. У одного: «Подайте бедному еврею», у второго: «Подайте бедному арабу». Шляпа первого пуста, а в шляпе второго куча денег.
MT5构建240。调用dll是允许的。
我得到的这个消息是什么?"2010.01.24 22:41:09 MQL5DLL_Test (GBPJPY,H4) Access violation write to 0x00000000 in 'D:\SoftForex\MetaTrader 5\MQL5\Libraries\MQL5DLLSamples.dll' ?
MT5构建240。调用dll已启用。
4.DLL函数中的异常捕捉
为了避免终端本身崩溃,每个DLL函数调用都自动被一个未处理的异常封装器保护。这种机制可以防止大多数标准错误(调用不可访问的内存,除以零,等等)。
为了检查这个机制的可操作性,让我们创建以下代码。
并从终端调用它。
因此,将有一个试图写进零地址的尝试,并产生一个异常。终端将拦截它,在日志中报告并继续其工作。
从文章 中可以看到一个示范性的例子。
谢谢你。所以我在读这篇文章时并不是很专心。:)
PS 我可以说:"听着,同志!"这样的话。再去重读一下这篇文章吧。"你会是对的。正如他们所说的那样,尊重和尊敬。
亲爱的pisara。
让我们把话说清楚--我们是在一个理论家 和一个实践者 之间进行争论。
不针对个人,直奔主题。一个好的理论家依靠的是实践经验,一个好的实践者要衡量七次。
当然,没有人禁止你为 "世界和平 "而战,但要考虑到比 "为什么不改善 "更多的因素。
这就是我写的--你不会使用它,因为你不想做常规工作。你将不得不在银盘上得到一切--所有指标、所有市场环境、不同时期的所有历史,等等。而且你需要做图表,因为你不会在头脑中操纵所有的指标。
因此,你实际上需要一个成熟的终端。我们给你的是:MetaTrader 5 + MQL5 + DLL。 称之为框架或只是说 - 给我们终端的源代码/组件(因为这是你要求的)。
这不是媾和,但你必须同意,让程序员的生活更轻松,提高交易系统的质量+其整合能力还没有伤害到任何人。不远的例子:Borland Delphi、MS .net都有一个完全开放的框架/组件库/类图,甚至有相当一部分源代码(Delphi)供平台用户使用。
程序员错误地认为能够用不受保护的母语为交易系统编写脚本是 "强大的",然后惊讶地发现甚至没有人要使用他们的创作。这就是为什么他们在出生前就死了。那些开发和创建用户社区的人想得更深(因为他们以前受过打击),不会犯这种错误。
让我们现实一点。如果你想发布一个软件并出售,在六个月或一年内发布一个付费更新,那么代码保护对你非常重要。如果你,正如我所理解的那样,长期在这里,并通过一连串的构建和支持不断改进平台,那么没有竞争对手会得到你。但用户将能够写出更好的代码。不仅是代码,还有TC结构,这也是同样重要的!我甚至可以拿反病毒来做类比--黑掉AV客户端还不能获得病毒数据库的更新(这里--配额)。
受控(默认情况下禁用)的DLL调用是可以接受的,但将别人制作的DLL下载到你的交易终端是一个漏洞,比未打补丁的IE6还要糟糕。
因此,这个洞只是一个用户的许可!一个贫穷的用户怎么能保证100%没有有害的DLL,即使它是由X公司签署的?毕竟,如果他在怀疑中禁止它,他永远不会知道它对他是否有用。所以在这里我们有一些心理学。
供您参考谷歌趋势关于自动化交易终端的 统计数据。
我想知道ordinates的比例是否是对数?
![](https://c.mql5.com/3/0/006.png)
顺便说一下,俄罗斯的数据很有趣,我们可以看到红色的Metastock正在领先。
请使用常规的 "回复 "功能。读起来非常不舒服。
要分割一个引文块,把你的光标放在你想要的地方,选择 "纯文本 "样式或按Ctrl+1。
一般来说,我建议你停止这种建议--它从根本上说是致命的,基于错误的假设,不适合应用语言。
作为一个笑话,有一个古老的笑话。
Сидят двое нищих. Перед каждым из них шляпа и надпись. У одного: «Подайте бедному еврею», у второго: «Подайте бедному арабу». Шляпа первого пуста, а в шляпе второго куча денег.
一个路人走近一个犹太人,扔了一个卢布,说。
- 听着,换个牌子,否则你会一直饿下去。
当这个路人离开后,这个犹太人转身对他的邻居说。
- 你明白吗,伊兹亚?这个人要给我们讲讲商业的事!
请使用常规的 "回复 "功能。读起来非常不舒服。
要打破一个引文块,把你的光标放在正确的地方,选择 "纯文本 "样式或按Ctrl+1。
一般来说,我建议你停止这种建议--它从根本上说是杀手,基于错误的假设,不适合应用语言。
作为一个笑话,有一个古老的笑话。
好吧,如果你不想给出前提是杀手的真正 原因,以及为什么.net框架对你来说是狭窄的,那么讨论就结束了。关于这个笑话,请自己衡量,寺院是你的。
剩下的就是祝愿大家在升级到5之后不要再回头了。
雷纳特,非常感谢你的文章!它非常有趣,内容丰富。不幸的是,我没有设法使用MQL5DLL Test.mq5脚本。我按照文章中的描述做了所有事情。然而,当我运行该脚本时,MT5就倒下了。我不知道问题出在哪里。可能是轴心的问题?我正在运行MS Vista x64。请告知如何解决这个问题 :-)
请再次阅读整篇文章。
只是在DLL里面有一个关于错误产生的地方(写入零地址),通过终端进一步抓取错误而不崩溃。有必要注释掉对fnCrashTest方法的调用。
今天我将在Vista x64上检查这个代码 - 可能是我们的错误。
请再次阅读整篇文章。
只是在DLL内部有一个关于错误产生的地方(写入零地址),并进一步通过终端捕捉这个错误而不崩溃。你应该注释掉对fnCrashTest方法的调用。
今天我将在Vista x64上检查这个代码 - 可能是我们的错误。
是的,我已经仔细阅读了所有内容,而且不止一次 :-))
我忘了告诉你,我在MQL5DLL Test.mq5脚本中注释了 fnCrashTest(int arr)函数。我仍然得到一个崩溃。:-(
这就是它看起来的样子。或者我必须在dll代码中注释掉函数fnCrashTest(int arr)?
1)哪个版本的终端是32位或64位?
2) 哪个版本的dll是32或64位?