专家: 行情监视 (内存映射文件) - 页 2 12 新评论 Alexey Klenov 2013.03.26 12:57 #11 sergeev:1)只有服务器有权修改内存,客户端只能读取。2) - 看看Pipe。在那里,数据到达的 "事件 "是不言自明的 - 您有数据,我们接受它,我们等待它。3)是的,您必须编写服务器或从 MSDN 复制,但现成的客户端可以直接在 MQL5 中使用。4)不幸的是,您无法通过轮询周期来解决这个问题。 即使在使用内存时,Sleep(1) 也不应该发出声音。 您应该检查函数的时序,也许在某个地方有额外的传递和加载。1 - 只是一个服务器(我根据您的工作写的)2 - 有趣的是,我只看我有一个 "尽可能及时 "传输数据 4(8) 字节的任务,即整个周期(必须经常执行)。3 - 我想,通过与文章的类比,我会自己做一个,但到目前为止,这个问题甚至连测试示例都不起作用。4 - 是的,我重写了一些优化过的代码,看起来效果更好。 Alexey Klenov 2013.03.31 22:24 #12 我尝试将您的 dll 添加到 mt4。2013.04.01 00:03:49 _tradeBuySell_mt4 GBPCHF,H1: -unknow err(0) h=0 2013.04.01 00:03:49 _tradeBuySell_mt4 GBPCHF,H1: function 'MemOpen' call from dll 'MemMap32.dll' critical error c0000005 at 666013E6. 代码如下 #include <stdlib.mqh> #define modeOpen 0 // 打开标志 #define modeCreate 1 // 创建标志 #import "MemMap32.dll" int MemOpen(string path,int size,int mode,int &err); // 在内存中打开/创建文件,获取句柄 void MemClose(int hmem); // 关闭内存中的文件 int MemGrows(int hmem,string path,int newsize,int &err); // 增加内存中文件的大小 int MemWrite(int hmem,int &v[], int pos, int sz, int &err); // 将 int(4) 向量 v 从指定位置 pos 写入内存,大小为 sz int MemRead(int hmem, int &v[], int pos, int sz, int &err); // 从指定位置 pos 读取大小为 sz 的向量 v #import int hmem,err; // string file; // 内存中的文件名 int init() { file="Local\\123"; // 内存中的文件名 hmem=MemOpen(file,-1,modeOpen,err); // 打开现有文件 if(hmem>0) // 如果打开 { Print("open OK h="+hmem); } else if(err==-2) // 如果未打开、 { Print("-err("+err+") memfile not found."); } else { Print("-unknow err("+err+") h="+hmem); return(0); } Print("OK ("+err+") h="+hmem); return(0); } --- 2013.03.31 23:32 #13 将螺丝刀右转 Alexey Klenov 2013.04.01 12:50 #14 sergeev:正确 旋转螺丝刀链接中的示例使用了 MemMap.dll不存在,是 MEmMap32.dll。在 mt5 中可以运行,但在 mt4 中找不到该文件。最初错误地声明了 err 应该是一个数组,谢谢你的解释。 Alexey Klenov 2013.08.27 06:15 #15 你能告诉我如何绕过这个问题吗?OK 1 01:10:31 tradeBuySell 'D:\MT5******\MQL5\Libraries\MemMap32.dll' is not 64-bit version JF 1 01:10:37 tradeBuySell (GBPUSD,H1) Cannot load 'D:\******\MQL5\Libraries\MemMap32.dll'服务器上自动安装了 x64 版本的终端 mt5。我的笔记本电脑装的是 Win7x64,但我用的是普通 32 位版本的终端,它不会自己升级到 x64。 12 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
1)只有服务器有权修改内存,客户端只能读取。
2) - 看看Pipe。在那里,数据到达的 "事件 "是不言自明的 - 您有数据,我们接受它,我们等待它。
3)是的,您必须编写服务器或从 MSDN 复制,但现成的客户端可以直接在 MQL5 中使用。
4)不幸的是,您无法通过轮询周期来解决这个问题。 即使在使用内存时,Sleep(1) 也不应该发出声音。 您应该检查函数的时序,也许在某个地方有额外的传递和加载。
1 - 只是一个服务器(我根据您的工作写的)
2 - 有趣的是,我只看我有一个 "尽可能及时 "传输数据 4(8) 字节的任务,即整个周期(必须经常执行)。
3 - 我想,通过与文章的类比,我会自己做一个,但到目前为止,这个问题甚至连测试示例都不起作用。
4 - 是的,我重写了一些优化过的代码,看起来效果更好。
我尝试将您的 dll 添加到 mt4。
代码如下将螺丝刀右转
正确 旋转螺丝刀
链接中的示例使用了 MemMap.dll
不存在,是 MEmMap32.dll。
在 mt5 中可以运行,但在 mt4 中找不到该文件。
最初错误地声明了 err 应该是一个数组,谢谢你的解释。
服务器上自动安装了 x64 版本的终端 mt5。
我的笔记本电脑装的是 Win7x64,但我用的是普通 32 位版本的终端,它不会自己升级到 x64。