错误、漏洞、问题 - 页 2654 1...264726482649265026512652265326542655265626572658265926602661...3184 新评论 Igor Makanu 2020.02.22 04:26 #26531 谁能就以下问题给我们指点一下。 有一个用C#写的dll,但被编译了。 - 用于MT5通常的C#项目 - Net Framework dll - 64位 - MT4 - Net Framework dll - 32位,但用管理的C语言调用包装。 来源dll是100%相同的,当然除了MT4包装器。 操作系统 Win10-64 那么,问题是为什么MT4的调用功能 正好快4倍,数字是大约100 000 dll调用MT4为7.5秒,MT5为30秒。 Vladimir Simakov 2020.02.22 12:10 #26532 Igor Makanu: 谁能就以下问题给我们指点一下。 有一个用C#写的dll,但被编译了。 - 用于MT5通常的C#项目 - Net Framework dll - 64位 - MT4 - Net Framework dll - 32位,但被管理的C语言调用所包裹。 来源dll是100%相同的,当然除了MT4包装器。 操作系统 Win10-64 那么,问题是为什么MT4的调用功能 正好快4倍,数字是大约100 000 dll调用MT4为7.5秒,MT5为30秒。 IMHO。一种情况是C-runtime,另一种情况是虚拟机。 Fast235 2020.02.22 13:48 #26533 错过了论坛上的一个新功能,其中的名字,姓氏,日期和旁边的按钮翻译,数字 - 1 2 3 ,不是每个人都有,昨天我想我没有,为什么不是所有的,和页面的定义是什么? [删除] 2020.02.22 13:51 #26534 专家顾问中实现了一个图形界面。还实现了用户事件(如GUI变化事件)。我在真实数据上进行调试(F5)。只要我在一个用户事件上设置一个断点--调试器就会停止,但随后按F5(继续调试)并不会导致GUI本身的变化。问题:应该是这样的,还是这是一个调试器的错误? 如果我删除断点(调试继续)--GUI的变化是正常的。 MT5,构建2340。 Igor Makanu 2020.02.22 14:01 #26535 Vladimir Simakov: IMHO。一种情况是C-runtime,另一种情况是虚拟机。 两个dll中都有一个虚拟的.Net。 我发现了代码中的差异,我甚至把32位基类扔到了一个单独的线程中,因为它没有其他的工作方式。 我对MT5做了同样的操作,结果大致相同(各做了三次测试)。 MT5: cycle 100000 , time 8.482981 sec , cycle 100000 , time 8.638789 sec , cycle 100000 , time 8.390046 sec MT4: cycle 100000 , time 7.128857 sec , cycle 100000 , time 7.176361 sec , cycle 100000 , time 7.205439 sec 好吧,让我们假设这是微软的某种烈酒 Viktor Levchenko 2020.02.23 14:10 #26536 问候!祝所有的人节日快乐 !!!! 我不明白在测试器中,股权的 "之 "字形显示是什么奇怪的错误。 我不明白在测试器中,股票显示呈之字形的奇怪错误。如果我把 "结算方式 "的设置从 "交换股票 "改为 "外汇",股权就会正常显示。几年前我也有过同样的经历,我想尝试将MT5连接到一个基金,测试了一下,害怕了,放弃了。现在我又试了一次,结果是一样的。这很奇怪吗? Sergey Dzyublik 2020.02.24 01:36 #26537 为什么不可能实现一个具有 "通用 "参数的函数,它可以传递任何变量,而不管其 "来源 "如何:lvalue、rvalue、literal或临时变量? 对于 "类型化 "容器类的方法来说,这个问题是可以解决的,但对于普通的函数来说是无法解决的。 主要的矛盾是,对于传输结构,有必要使用引用传输,而对于字词和临时变量--用值传输。 结果,我们得到一个正常lvalue类型的编译错误,因为两个重载函数都适合调用。 作为一个部分解决方案,而且只针对 "原始 "类型,你可以建立12个重载函数。 #define CREATE_LITERAL_PARAMETER_CALL_HANDLERS_VOID_T1_P2_L2(current_func_name, main_func_name, param_1) \ template<typename T> void current_func_name(param_1 p1, const string value){ main_func_name(p1, value);} \ template<typename T> void current_func_name(param_1 p1, const long value){ main_func_name(p1, value);} \ template<typename T> void current_func_name(param_1 p1, const int value){ main_func_name(p1, value);} \ template<typename T> void current_func_name(param_1 p1, const short value){ main_func_name(p1, value);} \ template<typename T> void current_func_name(param_1 p1, const char value){ main_func_name(p1, value);} \ template<typename T> void current_func_name(param_1 p1, const ulong value){ main_func_name(p1, value);} \ template<typename T> void current_func_name(param_1 p1, const uint value){ main_func_name(p1, value);} \ template<typename T> void current_func_name(param_1 p1, const ushort value){ main_func_name(p1, value);} \ template<typename T> void current_func_name(param_1 p1, const uchar value){ main_func_name(p1, value);} \ template<typename T> void current_func_name(param_1 p1, const double value){ main_func_name(p1, value);} \ template<typename T> void current_func_name(param_1 p1, const float value){ main_func_name(p1, value);} \ template<typename T> void current_func_name(param_1 p1, const bool value){ main_func_name(p1, value);} 但是,如果一个函数要接受两个 "通用 "参数,那么只需要144个重载函数来实现它,而在有三个这样的参数的情况下,则需要整个1728个重载函数。 建议。 最后允许用户将字面意义和临时变量作为const ref函数参数 传递。 让它成为一个独立的#指令--无论如何... Sergey Dzyublik 2020.02.24 10:35 #26538 模板函数/类缓存操作中的缺陷。( MT5(build 2340)没有修复)**未定义行为,你创建了一个内部类型为 "C "的复杂包装对象,几次后发现它是一个完全不同的数据类型,也许是 "B",也许是 "int",随你怎么想......( MT5(build 2340)没有修复)* 编译错误,传递函数指针作为const ref模板参数的错误。(未 被MT5(build 2340)修复) * 编译错误,B<int>对象可以在B<void*>类对象之后创建,但如果在之前创建,会发生编译错误。 模板功能/类工作中的缺陷。( MT5(build 2340)没有修复)** 编译错误,模板函数中的错误,在显式类型转换 操作中传递的指针表现得像一个类,否则像一个指针。( MT5(build 2340)没有修复)** 编译错误,使用内部类时模板类代码生成的错误。( MT5(build 2340)没有修复)** 编译错误,试图为模板函数的模板参数访问内部类时出现错误。( MT5(build 2340)没有修复)** 编译错误,模板方法/类生成时的错误,模板参数的 "自动替换 "过程超出了范围,进入了主程序代码。( MT5(build 2340)没有修复)* 编译错误,模板类作为模板方法的返回值时,模板类不能自动生成代码的错误。( MT5(build 2340)没有修复)* 编译错误,内部类定义中的错误--在指定基类时,没有可能明确引用全局命名空间。 与C++相比,MQL中重载函数调用的缺陷是优先级不匹配。( MT5(build 2340)没有修复)*** 当有类的继承性A <= B <= C <= D,并且实现了两个重载函数,例如,一个有参数A*,一个有参数B*,那么在MQL中传递这样的函数一个对象C*或D*会导致编译错误 "对重载函数的模糊调用"。( MT5(build 2340)没有修复)** 运行时,重载模板函数调用的优先级不匹配。 建议。link- 关于允许字面和临时变量作为const ref函数参数传递。link- 当在项目标签中移动 项目文件 时,对于在ME标签中打开的移动文件,要自动更新它们的位置路径。link- 在MQL中引入typedef声明功能。链接- 关于提供强制生成默认复制构造函数和赋值运算符的可能性。 fxsaber 2020.02.24 11:47 #26539 我在寻求帮助,我完全不在状态。 在OnChartEvent 中,通过按`C`我取消/恢复了价格图表。 一切都会很好,但如果键盘布局没有选择英语,就无法工作。 如何使按下 "C "的检测与所选择的布局无关? Vladimir Karputov 2020.02.24 12:05 #26540 fxsaber: 我在寻求帮助,我完全不在状态。 在OnChartEvent中,通过按`C`我取消/恢复了价格图表。 一切都会很好,但如果键盘布局没有选择英语,就无法工作。 如何使按下 "C "的检测与选定的布局无关? 需要检查lparam //+------------------------------------------------------------------+ //| TranslateKey.mq5 | //+------------------------------------------------------------------+ #property version "1.00" #property indicator_chart_window #property indicator_buffers 0 #property indicator_plots 0 //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam) { if(id==CHARTEVENT_KEYDOWN) { short sym=TranslateKey((int)lparam); //--- if the entered character is successfully converted to Unicode if(sym>0) Print("lparam: ",lparam,", ",sym,"'",ShortToString(sym),"'"); else Print("Error in TranslateKey for key=",lparam); } } //+------------------------------------------------------------------+ 对于ru和en键盘布局(包括小写和大写),lparam将是67。 TranslateKey (EURUSD,H1) lparam: 67, 67'C' TranslateKey (EURUSD,H1) lparam: 67, 1057'С' TranslateKey (EURUSD,H1) Error in TranslateKey for key=20 TranslateKey (EURUSD,H1) lparam: 67, 1089'с' TranslateKey (EURUSD,H1) lparam: 67, 99'c' 1...264726482649265026512652265326542655265626572658265926602661...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
谁能就以下问题给我们指点一下。
有一个用C#写的dll,但被编译了。
- 用于MT5通常的C#项目 - Net Framework dll - 64位
- MT4 - Net Framework dll - 32位,但用管理的C语言调用包装。
来源dll是100%相同的,当然除了MT4包装器。
操作系统 Win10-64
那么,问题是为什么MT4的调用功能 正好快4倍,数字是大约100 000 dll调用MT4为7.5秒,MT5为30秒。
谁能就以下问题给我们指点一下。
有一个用C#写的dll,但被编译了。
- 用于MT5通常的C#项目 - Net Framework dll - 64位
- MT4 - Net Framework dll - 32位,但被管理的C语言调用所包裹。
来源dll是100%相同的,当然除了MT4包装器。
操作系统 Win10-64
那么,问题是为什么MT4的调用功能 正好快4倍,数字是大约100 000 dll调用MT4为7.5秒,MT5为30秒。
IMHO。一种情况是C-runtime,另一种情况是虚拟机。
专家顾问中实现了一个图形界面。还实现了用户事件(如GUI变化事件)。我在真实数据上进行调试(F5)。只要我在一个用户事件上设置一个断点--调试器就会停止,但随后按F5(继续调试)并不会导致GUI本身的变化。问题:应该是这样的,还是这是一个调试器的错误?
如果我删除断点(调试继续)--GUI的变化是正常的。
MT5,构建2340。
IMHO。一种情况是C-runtime,另一种情况是虚拟机。
两个dll中都有一个虚拟的.Net。
我发现了代码中的差异,我甚至把32位基类扔到了一个单独的线程中,因为它没有其他的工作方式。
我对MT5做了同样的操作,结果大致相同(各做了三次测试)。
MT5: cycle 100000 , time 8.482981 sec , cycle 100000 , time 8.638789 sec , cycle 100000 , time 8.390046 sec
MT4: cycle 100000 , time 7.128857 sec , cycle 100000 , time 7.176361 sec , cycle 100000 , time 7.205439 sec
问候!祝所有的人节日快乐 !!!!
我不明白在测试器中,股权的 "之 "字形显示是什么奇怪的错误。 我不明白在测试器中,股票显示呈之字形的奇怪错误。如果我把 "结算方式 "的设置从 "交换股票 "改为 "外汇",股权就会正常显示。几年前我也有过同样的经历,我想尝试将MT5连接到一个基金,测试了一下,害怕了,放弃了。现在我又试了一次,结果是一样的。这很奇怪吗?
对于 "类型化 "容器类的方法来说,这个问题是可以解决的,但对于普通的函数来说是无法解决的。
主要的矛盾是,对于传输结构,有必要使用引用传输,而对于字词和临时变量--用值传输。
结果,我们得到一个正常lvalue类型的编译错误,因为两个重载函数都适合调用。
作为一个部分解决方案,而且只针对 "原始 "类型,你可以建立12个重载函数。
但是,如果一个函数要接受两个 "通用 "参数,那么只需要144个重载函数来实现它,而在有三个这样的参数的情况下,则需要整个1728个重载函数。
建议。
最后允许用户将字面意义和临时变量作为const ref函数参数 传递。
让它成为一个独立的#指令--无论如何...
模板函数/类缓存操作中的缺陷。
( MT5(build 2340)没有修复)**未定义行为,你创建了一个内部类型为 "C "的复杂包装对象,几次后发现它是一个完全不同的数据类型,也许是 "B",也许是 "int",随你怎么想......
( MT5(build 2340)没有修复)* 编译错误,传递函数指针作为const ref模板参数的错误。
(未 被MT5(build 2340)修复) * 编译错误,B<int>对象可以在B<void*>类对象之后创建,但如果在之前创建,会发生编译错误。
模板功能/类工作中的缺陷。
( MT5(build 2340)没有修复)** 编译错误,模板函数中的错误,在显式类型转换 操作中传递的指针表现得像一个类,否则像一个指针。
( MT5(build 2340)没有修复)** 编译错误,使用内部类时模板类代码生成的错误。
( MT5(build 2340)没有修复)** 编译错误,试图为模板函数的模板参数访问内部类时出现错误。
( MT5(build 2340)没有修复)** 编译错误,模板方法/类生成时的错误,模板参数的 "自动替换 "过程超出了范围,进入了主程序代码。
( MT5(build 2340)没有修复)* 编译错误,模板类作为模板方法的返回值时,模板类不能自动生成代码的错误。
( MT5(build 2340)没有修复)* 编译错误,内部类定义中的错误--在指定基类时,没有可能明确引用全局命名空间。
与C++相比,MQL中重载函数调用的缺陷是优先级不匹配。
( MT5(build 2340)没有修复)*** 当有类的继承性A <= B <= C <= D,并且实现了两个重载函数,例如,一个有参数A*,一个有参数B*,那么在MQL中传递这样的函数一个对象C*或D*会导致编译错误 "对重载函数的模糊调用"。
( MT5(build 2340)没有修复)** 运行时,重载模板函数调用的优先级不匹配。
建议。
link- 关于允许字面和临时变量作为const ref函数参数传递。
link- 当在项目标签中移动 项目文件 时,对于在ME标签中打开的移动文件,要自动更新它们的位置路径。
link- 在MQL中引入typedef声明功能。
链接- 关于提供强制生成默认复制构造函数和赋值运算符的可能性。
我在寻求帮助,我完全不在状态。
在OnChartEvent 中,通过按`C`我取消/恢复了价格图表。
一切都会很好,但如果键盘布局没有选择英语,就无法工作。
如何使按下 "C "的检测与所选择的布局无关?
我在寻求帮助,我完全不在状态。
在OnChartEvent中,通过按`C`我取消/恢复了价格图表。
一切都会很好,但如果键盘布局没有选择英语,就无法工作。
如何使按下 "C "的检测与选定的布局无关?
需要检查lparam
对于ru和en键盘布局(包括小写和大写),lparam将是67。