文章 "如何交换数据:10 分钟为 MQL5 创建 DLL" - 页 2

 
LEHayes:

...

你提出来是件好事,但如果不愿意提出解决方案,甚至不愿意就如何实现目标提出建议,那么抱怨对谁都没有好处。

...

事实上,pfx 提出并抱怨这个问题是件好事,MetaQuotes 应该解决这个问题,因为他们比我们其他人更了解 MetaTrader(顺便说一下,本文作者 Renat Fatkhullin 也是 MetaQuotes 的首席执行官)。不能因为有人提出了这个问题,他/她就有了解决问题的办法。

我同意"最好不要频繁调用 "这种 说法,因为实际上每次勾选都 会调用 .dll。很高兴听到 MetaQuotes 首席执行官这么说,如今诚实是个好东西。

@ pfx,看起来他们修改了你引用的那一段...

5.DLL 调用包装器和调用速度损失

如上所述,为了确保安全,每次调用 DLL 函数时都会使用一个特殊的封装器。

这种封装掩盖了基本代码,取代了堆栈,支持 stdcall / cdecl 协议,并监控所调用函数中的异常。

这项工作不可避免地会导致调用函数的延迟。

因此,不建议对小型操作执行非常频繁的 DLL 函数调用(每秒数百或数千次)。

最好还是不要频繁调用。

.. to this one ...

5.DLL 调用包装器和调用速度损失

如上所述,为了确保安全,DLL 函数的每次调用都会被封装到一个特殊的封装器中。这种封装掩盖了基本代码,取代了堆栈,支持 stdcall / cdecl 协议,并监控所调用函数中的异常。

这些工作并不会导致函数调用的显著延迟。

我希望他们能真正解决.dll 调用速度问题,而不仅仅是修改文章的某些段落来回避问题。

说到问题,我希望 Renat Fatkhullin 能回答 pfx 提出的问题:"我是认真的,这是什么样的说法",因为 Renat 在文章最后一行写道:"感谢您的关注!我随时准备回答任何问题",或者至少修改一下该段。

我们也很想听听您的回答:)。

有时间的话,我会再多写一些。

 

我不知道 Renat 是什么时候写的这篇文章,但微软已经不再提供 Visual Studio 2005 了。他们提供的是 Visual studio 2010 和 2011 测试版,而且看来要放弃 2008 版了。

点击这里 查看微软Visual Studio 2010,点击这里 查看2008。 安装程序是网络安装程序,如果网络连接速度慢,就会很麻烦。他们提供 ISO 映像的离线安装程序,但其中也包含 Visual Studio C# 和 Visual Basic。安装后,这两个工作室都需要一些更新,更新的 MB 大小也很大。

对于那些不喜欢安装 Visual Studio 的人来说,还有其他的选择,你可以访问https://en.wikipedia.org/wiki/Comparison_of_integrated_development_environments。 我最喜欢NetBeansCode::Block。NetBeans受甲骨文支持,是甲骨文Solaris Studio的基础。不过,NetBeans 并不自带编译器,所以你必须使用 Cygwin 或 MinGW 编译器,这对新手来说可能很麻烦 著名的 DevC++ 最新稳定版是 7 年前的产品,现在它的网站上到处都是死链接,看起来已经没人管了,所以我不推荐使用它。

不过最好还是使用 Visual Studio,因为它有很多选项,只要你知道如何使用。

Download Overview
  • www.microsoft.com
Download free 90-day trials of Visual Studio products, free Visual Studio Express products, and additional Visual Studio software.
 
onewithzachy:

说到问题,我希望雷纳特-法特胡林(Renat Fatkhullin)能回答一下 pfx 的问题:"我是认真的,这是什么样的说法",因为雷纳特在文章的最后一行写道:"感谢您的关注!我随时准备回答任何问题",或者至少修改一下该段。
调用 DLL 不会减速。
 
有人知道如何创建 64 位 DLL 或允许 MQL5 加载 32 位 DLL 吗?MQ5 无法加载我的测试脚本,因为我的 DLL "不是 64 位"。谢谢。
 
谢谢
 

非常好的教程!

我需要创建文件参考吗?

 

我需要修改 Fann2MQl.dll(记录在 http://fann2mql.wordpress.com),因为它在 MT5 中不起作用。原因是在 MT5 中不能随心所欲地打开文件。它们必须在两个默认位置(正向模式和测试模式)打开。

那么问题是 要调用什么函数来代替 fopen,以及包含什么头文件? 因为文件似乎必须从 MT5 内部打开。任何绕过 terminal.exe 打开文件的尝试(如使用 dll 中的 fopen 打开文件)都会根据使用的 terminal.exe 启动模式(点击图标或从带有参数 /portable 的命令行)自动转发到安装目录或桌面。

此外,这种转发还很奇怪,因为结果文件名只出现在文件路径的第一个字母中。

About
  • fann2mql.wordpress.com
Fann2MQL is a Neural Network processing package for MetaTrader4. It enables you to write your own Expert Adviser or Indicator taking advantage of Fast Artificial Neural Network Library. It’s very simple and efficient. You can use up to 1024 network simultaneously without recompiling it and in case you need more power it lets you perform...
 
RyanLeland:

有人知道如何创建 64 位 DLL 或允许 MQL5 加载 32 位 DLL 吗?MQ5 无法加载我的测试脚本,因为我的 DLL "不是 64 位"。谢谢。

可以解决这个问题,请参见此处的说明:解决方案资源管理器 -> 右键单击解决方案 -> 配置管理器 -> 激活解决方案平台下拉菜单 -> 选择 x64 -> 单击关闭 -> 重建解决方案

希望对您有所帮助。

祝你好运

 

您好、

Microsoft Visual Studio 2013 Express 版本生成的 DLL 无法运行,请参阅附件。

似乎找不到 MSVCR120D_APP.DLL 库,KERNEL_32 也有问题。

有人遇到过类似问题吗?请问如何解决这个问题?

谢谢。

 

mql5 是否支持包含回调函数 的导入 dll?

例如

有一个名为 tclient.dll 的 dll,其中包含以下函数:

typedef TCLIENT_API void(*call_back)(Tick* p);

TCLIENT_API int sub_tick(CTX ctx, const char* insId, call_back f);

那么我应该如何在 mql5 中声明和调用 sub_tick?

#import "tclient.dll" // 如何在 mql5 中声明函数 "sub_tick "并调用?

//如何声明函数 "sub_tick"

#导入

void ontick(Tick &ticks[])

{}

int OnInit()

{

// 如何调用函数 "sub_tick"?

}