资料库: 无需 DLL 的文件映射 - 页 7 123456789101112 新评论 Al_key 2016.02.19 09:14 #61 o_O:lib 不会绑定到分区,因为理论上代码可以在不同进程中执行。要控制它,可以使用您的变量或https://www.mql5.com/zh/code/1835。 我的理解是否正确,即如果命名了一个互斥器,我就可以从任何进程中获取它的句柄,而不仅仅是从 metatrader 中获取? Al_key 2016.02.19 09:25 #62 Al_key: 我的理解是否正确,如果 mutex 被命名,我就可以从任何进程中获取它的句柄,而不仅仅是 metatrader?https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms686931%28v=vs.85%29.aspx 我自己找到了答案。的确,它们可以在进程间共享。 Dmitry Luck'janenko 2016.03.04 07:35 #63 向作者提问。我在 mt4 中使用类。如果我关闭并打开终端,一切都会停止工作。如果在关机前删除智能交易系统,然后在打开终端后再将其连接上,这样做并不方便。有什么办法可以规避这个问题吗?第二个问题。我无法读取用 Delphi 编写的程序所创建的文件映射。有什么细微差别。简而言之,这些是在许多终端上运行的交易面板。 --- 2016.03.04 08:11 #64 Dmitry Luck'janenko:如果关闭并打开终端,一切都会停止工作。如果在关机前删除 EA,然后在打开终端后再附加它们,就不是很方便。有没有办法解决这个问题?有必要记录并查看文件在去初始化过程中发生了什么。我无法读取文件映射读取 "指的是 winapi 的什么函数? Dmitry Luck'janenko 2016.03.04 08:47 #65 o_O:在这种去初始化过程中,有必要记录并查看文件发生了什么。读取 "指的是 winapi 中的哪个函数?问题是,该函数HANDLE64 CMemMapFile::Open(LPTSTR path, DWORD size, int mode=modeOpen)总是返回 0。这就是我不知道文件是否打开的原因。上图是 Expert Advisor 打开尚未创建的文件映射的日志。没有任何错误。也许函数CMemMapFile::Open但由于返回的句柄始终为 0,因此无法进行检查以避免在每个 tick 时不断打开文件。关于第二个问题。我在 Delphi 中创建了一个应用程序,用于创建文件映射。在连接时,出现了错误。即没有正确传递数字。我开始使用 {$Align Off} 对齐。我还遇到了其他错误,比如读取 "msvcrt.dll "中 0x04E91000 的访问违规。现在数据正常对齐了 19 个字节 - "00:35:50.260 Panel v 1.00 GBPUSD.m,M5:OnInitsizeof(PipeData)= 19"。但在读取时,所有数据都为零。 --- 2016.03.04 09:32 #66 Dmitry Luck'janenko:问题是函数总是返回 0。这就是为什么我无法真正理解文件是否已打开。没错,CMemMapFile::Open 返回错误代码,或者在没有错误时返回 0。(不像CMemMapApi:,它会返回一个打开的句柄,并将错误写入传递的参数)。而句柄位于 m_hmem。在 delphi 中,您创建了一个创建文件映射的应用程序。在连接时,会出现错误。即传递的数字不正确。 您是否考虑了文件开头的保留 DWORD 字节? Dmitry Luck'janenko 2016.03.04 09:43 #67 o_O: 您是否考虑了文件开头的预留 DWORD 字节? 我试试看,我没算过。 --- 2016.03.04 09:53 #68 Dmitry Luck'janenko: 我试试看,我没数过。看看源文件是如何写入或创建的。关于 m_size 参数 Dmitry Luck'janenko 2016.03.04 18:05 #69 o_O:正确时,CMemMapFile::Open 将返回错误代码 或 0。(不像CMemMapApi:,它会返回一个打开句柄,并将错误写入传递的参数)。而句柄位于 m_hmem。 你是否考虑了文件开头的保留 DWORD 字节? 2016.03.04 19:00:00.897 BuyNow Client v 1.03 USDCHF.m,M5: BuyNow Client v 1.03.mq4, handle=8589934592在打开不存在的文件映射时为 m_hmem。如何确定这是错误还是句柄? --- 2016.03.04 18:07 #70 Dmitry Luck'janenko:是 m_hmem,当打开一个不存在的文件映射时。如何确定是错误还是句柄? 我编写的 CMemMapFile::Open 返回错误代码,或者在没有错误时返回 0。 123456789101112 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
lib 不会绑定到分区,因为理论上代码可以在不同进程中执行。
要控制它,可以使用您的变量或https://www.mql5.com/zh/code/1835。
我的理解是否正确,如果 mutex 被命名,我就可以从任何进程中获取它的句柄,而不仅仅是 metatrader?
向作者提问。
我在 mt4 中使用类。如果我关闭并打开终端,一切都会停止工作。如果在关机前删除智能交易系统,然后在打开终端后再将其连接上,这样做并不方便。有什么办法可以规避这个问题吗?
第二个问题。我无法读取用 Delphi 编写的程序所创建的文件映射。有什么细微差别。
简而言之,这些是在许多终端上运行的交易面板。
如果关闭并打开终端,一切都会停止工作。如果在关机前删除 EA,然后在打开终端后再附加它们,就不是很方便。有没有办法解决这个问题?
有必要记录并查看文件在去初始化过程中发生了什么。
我无法读取文件映射
读取 "指的是 winapi 的什么函数?
在这种去初始化过程中,有必要记录并查看文件发生了什么。
读取 "指的是 winapi 中的哪个函数?
问题是,该函数
总是返回 0。
这就是我不知道文件是否打开的原因。
上图是 Expert Advisor 打开尚未创建的文件映射的日志。没有任何错误。
也许函数
CMemMapFile::Open但由于返回的句柄始终为 0,因此无法进行检查以避免在每个 tick 时不断打开文件。
关于第二个问题。
我在 Delphi 中创建了一个应用程序,用于创建文件映射。在连接时,出现了错误。即没有正确传递数字。我开始使用 {$Align Off} 对齐。
我还遇到了其他错误,比如读取 "msvcrt.dll "中 0x04E91000 的访问违规。
现在数据正常对齐了 19 个字节 - "00:35:50.260 Panel v 1.00 GBPUSD.m,M5:OnInitsizeof(PipeData)= 19"。
但在读取时,所有数据都为零。
问题是函数
总是返回 0。
这就是为什么我无法真正理解文件是否已打开。
没错,CMemMapFile::Open 返回错误代码,或者在没有错误时返回 0。
(不像CMemMapApi:,它会返回一个打开的句柄,并将错误写入传递的参数)。
而句柄位于 m_hmem。
在 delphi 中,您创建了一个创建文件映射的应用程序。在连接时,会出现错误。即传递的数字不正确。
您是否考虑了文件开头的预留 DWORD 字节?我试试看,我没数过。
看看源文件是如何写入或创建的。
关于 m_size 参数
正确时,CMemMapFile::Open 将返回错误代码 或 0。
(不像CMemMapApi:,它会返回一个打开句柄,并将错误写入传递的参数)。
而句柄位于 m_hmem。
你是否考虑了文件开头的保留 DWORD 字节?在打开不存在的文件映射时为 m_hmem。如何确定这是错误还是句柄?
是 m_hmem,当打开一个不存在的文件映射时。如何确定是错误还是句柄?