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

 
我得到的这个消息是什么?"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是允许的。
 
joo:
我得到的这个消息是什么?"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函数调用都自动被一个未处理的异常封装器保护。这种机制可以防止大多数标准错误(调用不可访问的内存,除以零,等等)。

为了检查这个机制的可操作性,让我们创建以下代码。

_DLLAPI void __stdcall fnCrashTest(int *arr)
  {
//--- ожидаем получение нулевой ссылки, чтобы вызвать исключение
   *arr=0;
  }

并从终端调用它。

#import "MQL5DLLSamples.dll"
void fnCrashTest(int arr);
#import

//--- вызовем креш (среда исполнения перехватит исключение и не даст упасть терминалу)
   fnCrashTest(NULL);
   Print("Этого текста не увидите!");
//---

因此,将有一个试图写进零地址的尝试,并产生一个异常。终端将拦截它,在日志中报告并继续其工作。

MQL5DLL Test (GBPUSD,M1) 20:31:12 Access violation write to 0x00000000


 
Renat:
文章 中可以看到一个示范性的例子。

谢谢你。所以我在读这篇文章时并不是很专心。:)

PS 我可以说:"听着,同志!"这样的话。再去重读一下这篇文章吧。"你会是对的。正如他们所说的那样,尊重和尊敬。

 
雷纳特

亲爱的pisara。

让我们把话说清楚--我们是在一个理论家一个实践者 之间进行争论。
不针对个人,直奔主题。一个好的理论家依靠的是实践经验,一个好的实践者要衡量七次。

当然,没有人禁止你为 "世界和平 "而战,但要考虑到比 "为什么不改善 "更多的因素。

这就是我写的--你不会使用它,因为你不想做常规工作。你将不得不在银盘上得到一切--所有指标、所有市场环境、不同时期的所有历史,等等。而且你需要做图表,因为你不会在头脑中操纵所有的指标。

因此,你实际上需要一个成熟的终端。我们给你的是:MetaTrader 5 + MQL5 + DLL。 称之为框架或只是说 - 给我们终端的源代码/组件(因为这是你要求的)。

这不是媾和,但你必须同意,让程序员的生活更轻松,提高交易系统的质量+其整合能力还没有伤害到任何人。不远的例子:Borland Delphi、MS .net都有一个完全开放的框架/组件库/类图,甚至有相当一部分源代码(Delphi)供平台用户使用。

程序员错误地认为能够用不受保护的母语为交易系统编写脚本是 "强大的",然后惊讶地发现甚至没有人要使用他们的创作。这就是为什么他们在出生前就死了。那些开发和创建用户社区的人想得更深(因为他们以前受过打击),不会犯这种错误。
让我们现实一点。如果你想发布一个软件并出售,在六个月或一年内发布一个付费更新,那么代码保护对你非常重要。如果你,正如我所理解的那样,长期在这里,并通过一连串的构建和支持不断改进平台,那么没有竞争对手会得到你。但用户将能够写出更好的代码。不仅是代码,还有TC结构,这也是同样重要的!我甚至可以拿反病毒来做类比--黑掉AV客户端还不能获得病毒数据库的更新(这里--配额)。

受控(默认情况下禁用)的DLL调用是可以接受的,但将别人制作的DLL下载到你的交易终端是一个漏洞,比未打补丁的IE6还要糟糕。
因此,这个洞只是一个用户的许可!一个贫穷的用户怎么能保证100%没有有害的DLL,即使它是由X公司签署的?毕竟,如果他在怀疑中禁止它,他永远不会知道它对他是否有用。所以在这里我们有一些心理学。


供您参考谷歌趋势关于自动化交易终端的 统计数据。

我想知道ordinates的比例是否是对数?
顺便说一下,俄罗斯的数据很有趣,我们可以看到红色的Metastock正在领先。

Google Тренды - Сервис: Поиск по Интернету. Запросы не указаны. - По всему миру, 2004 – настоящее время
Google Тренды - Сервис: Поиск по Интернету. Запросы не указаны. - По всему миру, 2004 – настоящее время
  • www.google.ru
Изучайте популярные поисковые запросы при помощи службы "Google Тренды".
 

请使用常规的 "回复 "功能。读起来非常不舒服。

要分割一个引文块,把你的光标放在你想要的地方,选择 "纯文本 "样式或按Ctrl+1。


一般来说,我建议你停止这种建议--它从根本上说是致命的,基于错误的假设,不适合应用语言。

作为一个笑话,有一个古老的笑话。

Сидят двое нищих. Перед каждым из них шляпа и надпись. У одного: «Подайте бедному еврею», у второго: «Подайте бедному арабу». Шляпа первого пуста, а в шляпе второго куча денег.

一个路人走近一个犹太人,扔了一个卢布,说。

- 听着,换个牌子,否则你会一直饿下去。

当这个路人离开后,这个犹太人转身对他的邻居说。

- 你明白吗,伊兹亚?这个人要给我们讲讲商业的事!

 
Renat:

请使用常规的 "回复 "功能。读起来非常不舒服。

要打破一个引文块,把你的光标放在正确的地方,选择 "纯文本 "样式或按Ctrl+1。


一般来说,我建议你停止这种建议--它从根本上说是杀手,基于错误的假设,不适合应用语言。

作为一个笑话,有一个古老的笑话。


好吧,如果你不想给出前提是杀手的真正 原因,以及为什么.net框架对你来说是狭窄的,那么讨论就结束了。关于这个笑话,请自己衡量,寺院是你的。

剩下的就是祝愿大家在升级到5之后不要再回头了。

 
雷纳特,非常感谢你的文章!它非常有趣,内容丰富。不幸的是,我没有设法使用MQL5DLL Test.mq5脚本。我按照文章中的描述做了所有事情。然而,当我运行该脚本时,MT5就倒下了。我不知道问题出在哪里。可能是轴心的问题?我正在运行MS Vista x64。请告知如何解决这个问题 :-)
 
denkir:
雷纳特,非常感谢你的文章!它非常有趣,内容丰富。不幸的是,我没有设法使用MQL5DLL Test.mq5脚本。我按照文章中的描述做了所有事情。然而,当我运行该脚本时,MT5就倒下了。我不知道问题出在哪里。可能是轴心的问题?我正在运行MS Vista x64。请告知如何解决这个问题 :-)

请再次阅读整篇文章。

只是在DLL里面有一个关于错误产生的地方(写入零地址),通过终端进一步抓取错误而不崩溃。有必要注释掉对fnCrashTest方法的调用。

今天我将在Vista x64上检查这个代码 - 可能是我们的错误。

 
Renat писал(а) :

请再次阅读整篇文章。

只是在DLL内部有一个关于错误产生的地方(写入零地址),并进一步通过终端捕捉这个错误而不崩溃。你应该注释掉对fnCrashTest方法的调用。

今天我将在Vista x64上检查这个代码 - 可能是我们的错误。

是的,我已经仔细阅读了所有内容,而且不止一次 :-))

我忘了告诉你,我在MQL5DLL Test.mq5脚本中注释了 fnCrashTest(int arr)函数。我仍然得到一个崩溃。:-(

这就是它看起来的样子。或者我必须在dll代码中注释掉函数fnCrashTest(int arr)?

=========================
#import "MQL5DLLSamples.dll"
int  fnCalculateSpeed(int &res1,double &res2);
void fnFillArray(int &arr[],int arr_size);
void fnReplaceString(string text,string from,string to);
//void fnCrashTest(int arr);
#import
=========================

//fnCrashTest(NULL);
//Print("Этого текста не увидите!");

 

1)哪个版本的终端是32位或64位?

2) 哪个版本的dll是32或64位?