错误、漏洞、问题 - 页 1017 1...101010111012101310141015101610171018101910201021102210231024...3184 新评论 Vladimir Gomonov 2013.07.21 17:51 #10161 A100: 简而言之,你不能在.mqh中定义一个函数实现,并在任何.ex5中顺利使用它。:)但是,当你用一个.ex5来调用 另一个.ex5上的函数时,即使该名称的函数存在于两个.ex5中,你也必须确保你准确地指定命名空间。也就是说,理论上,::In()应该能解决问题。 而如果不能--这是一个需要修复的错误。 Документация по MQL5: Основы языка / Функции / Вызов функции www.mql5.com Основы языка / Функции / Вызов функции - Документация по MQL5 A100 2013.07.21 17:55 #10162 让我们停止使用ServiceDesk的答案。 "当编译1.mq5时,在函数B()里面,不清楚应该调用哪个函数, imported A()还是exported A() - 因为编译器不明白你是指同一个函数" 他们在形式上是对的--但如果你想的话,编译器可以(而且应该)被告知这是同一个函数,因为我重复编译时的模块名称是可用的(在#import中指定)。 更有甚者,如果你先把:: 放在一个地方并进行编译,然后删除并把:: 放在另一个地方--一切都能正常工作,但你必须同意--这非常不方便,在经过10-15次这样的强制排列组合后,我改用#define Vladimir Gomonov 2013.07.21 18:22 #10163 A100:让我们停止使用ServiceDesk的答案。 "在编译1.mq5时,在B()函数里面,不清楚应该调用哪个函数。导入A()或导出A()--因为编译器不理解你是指同一个函数" 绝对的,事情就是这样的。 它们在形式上是正确的--但如果需要的话,编译器可以(也应该)告诉它是同一个函数,因为我重复了模块名称在编译时是可用的(在#import中指定)。 对于这样的提示,有一个上下文解析操作符"::",但它在这种情况下不适用,因为模块(文件)名称也是一样。建议是充分的--改变计划的结构。 更重要的是,如果你先在一个地方放上::并进行编译,然后删除并在另一个地方放上::,一切都能正常工作,但你必须同意,这非常不方便。 最好避免这种伎俩。 它不仅不方便,而且是 "不正确的种族"、"不合适的"、"丑陋的 "和 "在鼻涕上"。 只有在没有其他选择来实现你想要的东西时,欺骗编译器的企图才有权利存在。 在这种情况下,有很多。在经历了10-15次这样的强制排列组合后,我改用#define参数化的定义只有在类型感应不理想或参数被 "冗长 "的文本块取代时才有用。 作为内联函数的替代品,定义无疑对程序的健康是有害的。--在你的情况下,我会拒绝使用.ex5库,一切都可以正常工作。 它们唯一的实际用途是在隐藏实现(销售时),我没有看到它们在其他情况下的用途。你在为销售而写作吗? A100 2013.07.21 19:00 #10164 MetaDriver: 你在为销售而写作吗? 就我自己而言。 没有.ex5,我做不到。我也有像F( string& [] ) 这样的函数,它们不知为何不适合放在.dll中 :) 也许可以通过分离器推动它们,但我还没有试过。 TheXpert 2013.07.21 19:12 #10165 A100: MQL5只是没有内联函数(在表单中),我使用参数化的宏来代替,这并不完全正确,因为没有类型控制。另外,编译器不对表达式进行优化,所以会有额外的速度损失。你最好检查一下。顺便说一下,关于内联 - 它是有效的。因为它,我在调试器方面遇到了一些问题。 A100 2013.07.21 19:24 #10166 TheXpert:顺便说一下,关于内联的问题 -- 它是有效的。因为它,调试器也出现了问题。 所以它在编译器层面上起作用。我希望它能在语言层面上工作。 我在上面举了一个例子--一切都通过莫名其妙的 "绕过编译器 "工作,而直接工作则需要额外的步骤,有时是显著的,因为正如你所建议的,不在一个文件中包括一个相同功能的描述和实现当然是可能的,但随后10个完整的.mqh被分解成100个小.mqh 我还没有追逐速度。最主要的是方便,代码量不会成倍增长。 我甚至面临着在MQL5中使用#if #else类似物的必要性(到目前为止有点棘手,但在这里和那里都可以使用)。 TheXpert 2013.07.21 19:28 #10167 A100: 我还不追求速度。最主要的是方便,代码量不会成倍增长。 这取决于你。但考虑到对元引号的病态喜爱,你用这样的宏抓到一两个耙子的概率远非零。 Vladimir Gomonov 2013.07.21 22:14 #10168 A100:没有.ex5,它就不能工作。我也有像F( string& [] ) 这样的函数,但它们不适合放在.dll中 :)....天啊...:)我并没有建议用DLL代替.ex5库,只是用很多很多的.mqh和一个可执行的.mq5,没有别的。 A100 2013.07.22 07:06 #10169 MetaDriver: 只有很多很多的.mqh和一个可执行的.mq5,没有别的。 我在3个不同的终端上使用一个代码,这意味着至少有一个.ex5(所有人共享)必须是。如果是这样的话--那么又回到了上面描述的问题--只有两个模块--但它们不能正常编译。 A100 2013.07.22 07:12 #10170 ChartGetInteger( chart_ID, CHART_BRING_TO_TOP, 0, true ) ChartGetInteger( chart_ID, CHART_BRING_TO_TOP, true ) 它在非交易时间不工作。是什么阻止了你在非交易时间将时间表放在所有其他时间表之上? 1...101010111012101310141015101610171018101910201021102210231024...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
简而言之,你不能在.mqh中定义一个函数实现,并在任何.ex5中顺利使用它。
:)
但是,当你用一个.ex5来调用 另一个.ex5上的函数时,即使该名称的函数存在于两个.ex5中,你也必须确保你准确地指定命名空间。也就是说,理论上,::In()应该能解决问题。 而如果不能--这是一个需要修复的错误。
让我们停止使用ServiceDesk的答案。
"当编译1.mq5时,在函数B()里面,不清楚应该调用哪个函数,
imported A()还是exported A() - 因为编译器不明白你是指同一个函数"
他们在形式上是对的--但如果你想的话,编译器可以(而且应该)被告知这是同一个函数,因为我重复编译时的模块名称是可用的(在#import中指定)。
更有甚者,如果你先把:: 放在一个地方并进行编译,然后删除并把:: 放在另一个地方--一切都能正常工作,但你必须同意--这非常不方便,在经过10-15次这样的强制排列组合后,我改用#define
让我们停止使用ServiceDesk的答案。
"在编译1.mq5时,在B()函数里面,不清楚应该调用哪个函数。
导入A()或导出A()--因为编译器不理解你是指同一个函数"
它们在形式上是正确的--但如果需要的话,编译器可以(也应该)告诉它是同一个函数,因为我重复了模块名称在编译时是可用的(在#import中指定)。
对于这样的提示,有一个上下文解析操作符"::",但它在这种情况下不适用,因为模块(文件)名称也是一样。
建议是充分的--改变计划的结构。
更重要的是,如果你先在一个地方放上::并进行编译,然后删除并在另一个地方放上::,一切都能正常工作,但你必须同意,这非常不方便。
在经历了10-15次这样的强制排列组合后,我改用#define
参数化的定义只有在类型感应不理想或参数被 "冗长 "的文本块取代时才有用。 作为内联函数的替代品,定义无疑对程序的健康是有害的。
--
在你的情况下,我会拒绝使用.ex5库,一切都可以正常工作。 它们唯一的实际用途是在隐藏实现(销售时),我没有看到它们在其他情况下的用途。
你在为销售而写作吗?
你在为销售而写作吗?
就我自己而言。
没有.ex5,我做不到。我也有像F( string& [] ) 这样的函数,它们不知为何不适合放在.dll中 :)
也许可以通过分离器推动它们,但我还没有试过。
MQL5只是没有内联函数(在表单中),我使用参数化的宏来代替,这并不完全正确,因为没有类型控制。
另外,编译器不对表达式进行优化,所以会有额外的速度损失。你最好检查一下。
顺便说一下,关于内联 - 它是有效的。因为它,我在调试器方面遇到了一些问题。
顺便说一下,关于内联的问题 -- 它是有效的。因为它,调试器也出现了问题。
所以它在编译器层面上起作用。我希望它能在语言层面上工作。 我在上面举了一个例子--一切都通过莫名其妙的 "绕过编译器 "工作,而直接工作则需要额外的步骤,有时是显著的,因为正如你所建议的,不在一个文件中包括一个相同功能的描述和实现当然是可能的,但随后10个完整的.mqh被分解成100个小.mqh
我还没有追逐速度。最主要的是方便,代码量不会成倍增长。
我甚至面临着在MQL5中使用#if #else类似物的必要性(到目前为止有点棘手,但在这里和那里都可以使用)。
我还不追求速度。最主要的是方便,代码量不会成倍增长。
A100:
没有.ex5,它就不能工作。我也有像F( string& [] ) 这样的函数,但它们不适合放在.dll中 :)
....
天啊...:)
我并没有建议用DLL代替.ex5库,只是用很多很多的.mqh和一个可执行的.mq5,没有别的。
只有很多很多的.mqh和一个可执行的.mq5,没有别的。