资料库: 无需 DLL 的文件映射 - 页 10 1...3456789101112 新评论 Иван 2017.09.20 12:44 #91 o_o:至少你不会在重启电脑后试图读取内存中的文件...所以我的理解是,我不能用这种方式在两个终端之间通过内存传输数据?正确的方法是什么?我需要使用MemMapLib.mqh 实现从一个终端向另一个终端传输文本字符串。 --- 2017.09.20 13:01 #92 Иван: 所以我的理解是,我不能用这种方式在两个终端之间通过内存传输数据?可以您需要使用MemMapLib.mqh 实现从一个终端向另一个终端传输一行文本。创建文件、写入文件,然后读取文件。大致顺序如下https://www.mql5.com/zh/code/10571 Иван 2017.09.23 01:20 #93 CMemMapFile hmem; long err=hmem.Open("Local\\test",111,modeCreate);我写入内存中打开的文件然后读取的最大数据量 是多少?在 4096 之后,Expert Advisor 就会开始崩溃。 --- 2017.09.23 07:35 #94 给我代码和打印输出 [删除] 2017.10.07 09:35 #95 HANDLE64 CMemMapFile::Open(LPTSTR path, DWORD size, int mode=modeOpen) { m_size=size; m_path=path; m_mode=mode; m_pos=0; // начальное положение if (m_path=="") return(-1); m_hmem=Open(m_path, size, mode, err); if (m_hmem==NULL) return(err); // если ошибка создания return(0); } 你好,上述代码中的 "return(0) "应更正为 "return(m_hmem)",否则将无法返回内存映射文件的句柄。 Алексей Барбашин 2017.10.23 10:14 #96 我试图向文件 写入一个 200 个字符的长字符串,在库的第 214 行出现了超出数组大小的错误。原来,在确定接收数组的大小时,没有考虑头的大小。 --- 2017.10.23 11:20 #97 Алексей Барбашин:它在工作。不工作。给我代码和主轴 Алексей Барбашин 2017.10.23 16:58 #98 o_o:没有用。给我代码和打印输出 string control_text = "我们的妈妈在放声大哭,因为大家都在大吃大喝。嘘,妈妈,别哭!其他人也是这样......"; string NAME_MAPPING = "Local\\" + Symbol() + "_" + (string)ChartID(); uchar Data_sender[]; int size_data = StringToCharArray(control_text, Data_sender); //--- 创建一个内存对象 CMemMapFile* MappingFile = new CMemMapFile(); //--- 创建一个用于记录的文件 long err = MappingFile.Open(NAME_MAPPING, size_data+4, modeCreate); //--- 将数据写入文件 err = MappingFile.Write(Data_sender, size_data); //--- 关闭记录 MappingFile.Close(); //-- 删除指针 delete MappingFile; uchar Data_receiver[]; ArrayResize(Data_receiver, size_data); //--- 创建一个内存对象 CMemMapFile* MF = new CMemMapFile(); //--- 打开文件供阅读 err = MF.Open(NAME_MAPPING, size_data+4, modeOpen); //--- Сдвигаем указатель чтения на начало файла MF.Seek(0,SEEK_SET); //--- Читаем данные из файла err=MF.Read(Data_receiver, size_data); //--- 关闭文件 MF.Close(); //-- 删除指针 delete MF; Print(CharArrayToString(Data_receiver));我已经知道了尺寸。但我试图用另一个对象读取文件,结果输出结果是无声的。错误出在哪里? --- 2017.10.23 17:45 #99 Алексей Барбашин: 我知道了尺寸。但我尝试用另一个对象来读取文件,结果输出结果是无声的。哪里出错了?//--- 关闭记录这不叫关闭记录,这叫关闭并删除文件。这就是为什么 //--- 打开文件供阅读 你试图打开一个不存在的文件。 Алексей Барбашин 2017.10.23 19:01 #100 o_o:不是关闭记录,而是关闭并删除文件。这就是为什么 你试图打开的东西并不存在。好吧,有道理。我是在类比处理普通文件时的做法,关闭正是关闭和释放,而不是删除文件。 1...3456789101112 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
至少你不会在重启电脑后试图读取内存中的文件...
所以我的理解是,我不能用这种方式在两个终端之间通过内存传输数据?
正确的方法是什么?我需要使用MemMapLib.mqh 实现从一个终端向另一个终端传输文本字符串。
所以我的理解是,我不能用这种方式在两个终端之间通过内存传输数据?
可以
您需要使用MemMapLib.mqh 实现从一个终端向另一个终端传输一行文本。
创建文件、写入文件,然后读取文件。
大致顺序如下
https://www.mql5.com/zh/code/10571
我写入内存中打开的文件然后读取的最大数据量 是多少?
在 4096 之后,Expert Advisor 就会开始崩溃。
你好,上述代码中的 "return(0) "应更正为 "return(m_hmem)",否则将无法返回内存映射文件的句柄。
我试图向文件 写入一个 200 个字符的长字符串,在库的第 214 行出现了超出数组大小的错误。原来,在确定接收数组的大小时,没有考虑头的大小。
它在工作。
不工作。
给我代码和主轴
没有用。
给我代码和打印输出
我已经知道了尺寸。但我试图用另一个对象读取文件,结果输出结果是无声的。错误出在哪里?
我知道了尺寸。但我尝试用另一个对象来读取文件,结果输出结果是无声的。哪里出错了?
//--- 关闭记录这不叫关闭记录,这叫关闭并删除文件。
这就是为什么
//--- 打开文件供阅读你试图打开一个不存在的文件。不是关闭记录,而是关闭并删除文件。
这就是为什么
你试图打开的东西并不存在。好吧,有道理。我是在类比处理普通文件时的做法,关闭正是关闭和释放,而不是删除文件。