专家: 行情监视 (内存映射文件) - 页 2

 
sergeev:

1)只有服务器有权修改内存,客户端只能读取。

2) - 看看Pipe。在那里,数据到达的 "事件 "是不言自明的 - 您有数据,我们接受它,我们等待它。

3)是的,您必须编写服务器或从 MSDN 复制,但现成的客户端可以直接在 MQL5 中使用。

4)不幸的是,您无法通过轮询周期来解决这个问题。 即使在使用内存时,Sleep(1) 也不应该发出声音。 您应该检查函数的时序,也许在某个地方有额外的传递和加载。

1 - 只是一个服务器(我根据您的工作写的)

2 - 有趣的是,我只看我有一个 "尽可能及时 "传输数据 4(8) 字节的任务,即整个周期(必须经常执行)。

3 - 我想,通过与文章的类比,我会自己做一个,但到目前为止,这个问题甚至连测试示例都不起作用。

4 - 是的,我重写了一些优化过的代码,看起来效果更好。

 

我尝试将您的 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);
   }
 

将螺丝刀右转

 
sergeev:

正确 旋转螺丝刀

链接中的示例使用了 MemMap.dll

不存在,是 MEmMap32.dll。

在 mt5 中可以运行,但在 mt4 中找不到该文件。

最初错误地声明了 err 应该是一个数组,谢谢你的解释。

 
你能告诉我如何绕过这个问题吗?
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。