错误、漏洞、问题 - 页 2707 1...270027012702270327042705270627072708270927102711271227132714...3184 新评论 Ilyas 2020.04.16 11:31 #27061 Sergey Dzyublik: 请开发人员(@Ilyas)注意检测到的错误。 Bug MT5(build 2377)当为指针类型的参数选择合适的重载函数时,将类型转换为指向父类 而非基类的指针的函数变得更优先。 当基类的指针被分配到父类的指针上时,也不会出现编译时错误。 可能相关的错误:https://www.mql5.com/ru/forum/1111/page2682#comment_15591437 class A{}; class B : public A{}; class C : public B{}; struct T{ static void test(A*){ printf("A*"); } static void test(C*){ printf("C*"); } }; struct TT{ static void test(B*){ printf("B*"); } }; void OnStart(){ B b; T::test(&b); // Runtime Error: Incorrect casting of pointers. Expected result: printf("A*"); A a; TT::test(&a); // Runtime Error: Incorrect casting of pointers. Expected result: Compilation Error B* ptr = &a; // Runtime Error: Incorrect casting of pointers. Expected result: Compilation Error } 谢谢你的留言。 纠正的是 Runtime Error: Incorrect casting of pointers. Expected result: printf("A*"); 保持原样--这段代码可能是模板特殊化的结果(在一部分不会工作,但会影响编译)。 Runtime Error: Incorrect casting of pointers. Expected result: Compilation Error Runtime Error: Incorrect casting of pointers. Expected result: Compilation Error Stanislav Korotky 2020.04.16 13:35 #27062 Roman: 是的,在你的代码中,80端口的头会被返回,443端口则不会。 再次重温了你的代码,没有看到SocketTlsHandshake函数。 你的代码没有做握手的动作。这可能是原因。 虽然这个功能的帮助说,如果你连接到443端口,就不需要这个功能。 没错,这不是我的代码,而是来自开发者的例子(MQ的套接字有一些不直观的功能,有时会在论坛上被弄明白,所以我转向标准的例子)。 我试过SocketTlsHandshake - 它在所有条件下总是返回false,对解决问题没有影响。由于证书数据被返回,握手就会通过。即使是头,从其长度来看,也是来了,但就是不返回MQL代码。错误代码 太笼统,错误本身也值得怀疑。我们需要一个内部人的观点。 Ilyas 2020.04.16 14:32 #27063 Stanislav Korotky: 没错,这不是我的代码,而是来自开发者的例子(MQ的套接字有一些不直观的功能,有时会在论坛上弄明白,所以我转向了标准的例子)。 SocketTlsHandshake我试过了 - 它在所有条件下总是返回false,对问题的解决没有影响。由于证书数据被返回,握手就会通过。即使是头,从其长度来看,也是到达了,但就是不返回MQL代码。错误代码 太笼统了,而且错误本身也值得怀疑。我们需要一个内部人的观点。 如果连接最初是安全的("https://"或端口443或465),则不需要使用SocketTlsHandshake函数。 该函数被用于特殊情况/协议中 Stanislav Korotky 2020.04.16 14:34 #27064 Ilyas: 如果连接最初是安全的("https://"或端口443或465),则不需要使用SocketTlsHandshake。 该函数被用于特殊情况/协议中 我不使用它。重现该问题的代码见附件。 Ilyas 2020.04.16 15:10 #27065 Stanislav Korotky:我不使用它。重现该问题的代码见附件。 用SocketTlsReadAvailable 取代SocketTlsRead Stanislav Korotky 2020.04.16 15:46 #27066 Ilyas: 用SocketTlsReadAvailable取代SocketTlsRead 你能说得更具体些吗?在示例文档中,使用的是SocketTlsRead。为什么那里没有使用SocketTlsReadAvailable? 什么时候应该使用一种功能,什么时候应该使用另一种功能? 如何编写阻断从套接字读取的通用代码,适用于受保护和不受保护的连接 - 我们没有SocketReadAvailable函数,是吗? PS。改变了功能。错误并没有消失。以下是更新后的代码。GetLastError返回0。 附加的文件: SocketExample.mq5 4 kb Stanislav Korotky 2020.04.16 15:50 #27067 在视觉测试器中,从指标中调用CopyTicksRange 函数,以错误4014(ERR_FUNCTION_NOT_ALLOWED)终止。 同样的指标在同一仪器上在线工作正常。有什么问题呢?这个功能在测试器中是否被禁止?在帮助中没有找到任何关于它的说法。 Andrey Khatimlianskii 2020.04.16 17:01 #27068 Stanislav Korotky: 在视觉测试器中,从指标中调用CopyTicksRange 函数,以错误4014(ERR_FUNCTION_NOT_ALLOWED)终止。 同样的指标在同一仪器上在线工作正常。有什么问题呢?这个功能在测试器中是否被禁止?我没有在帮助中找到它。 用真正的蜱虫测试? Roman 2020.04.16 19:46 #27069 Stanislav Korotky: 没错,这不是我的代码,而是来自开发者的例子(来自MQ的套接字有一些不直观的功能,有时会在论坛上弄明白,所以我转向了标准的例子)。 我试过SocketTlsHandshake - 它在所有条件下总是返回错误,对解决问题没有影响。由于证书数据被返回,握手就会通过。即使是头,从其长度来看,也是到达了,但就是不返回MQL代码。错误代码 太笼统了,而且错误本身也值得怀疑。我们需要一个内部人的观点。 是的,我也很惊讶,没有SocketTlsHandshake,证书会被返回。 但在SocketTlsHandshake函数中,它调用了错误。 行为中存在着某种隐含的逻辑。 if(SocketConnect(socket, Address, Port, 5000) && SocketTlsHandshake(socket, Address)) Can't connect to echo.websocket.org:443, error 5274 UPD。 伊利亚斯的建议已被看到。 是的,没有这个功能,连接就没有问题。 问题在于阅读。 Roman 2020.04.16 19:51 #27070 Ilyas:用SocketTlsReadAvailable取代SocketTlsRead 我试着用SocketTlsReadAvailable 进行同样的替换 int rsp_len; if(ExtTLS) rsp_len = SocketTlsReadAvailable(socket, rsp, len); //rsp_len = SocketTlsRead(socket, rsp, len); else rsp_len = SocketRead(socket, rsp, len, timeout); 其行为与SocketTlsRead 相同。 UPD: 在不同的端口上使用SocketTlsHandshake时也存在同样的问题。 1...270027012702270327042705270627072708270927102711271227132714...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
请开发人员(@Ilyas)注意检测到的错误。
Bug MT5(build 2377)当为指针类型的参数选择合适的重载函数时,将类型转换为指向父类 而非基类的指针的函数变得更优先。
当基类的指针被分配到父类的指针上时,也不会出现编译时错误。
可能相关的错误:https://www.mql5.com/ru/forum/1111/page2682#comment_15591437
谢谢你的留言。
纠正的是
Runtime Error: Incorrect casting of pointers. Expected result: printf("A*");保持原样--这段代码可能是模板特殊化的结果(在一部分不会工作,但会影响编译)。
是的,在你的代码中,80端口的头会被返回,443端口则不会。
再次重温了你的代码,没有看到SocketTlsHandshake函数。
你的代码没有做握手的动作。这可能是原因。
虽然这个功能的帮助说,如果你连接到443端口,就不需要这个功能。
没错,这不是我的代码,而是来自开发者的例子(MQ的套接字有一些不直观的功能,有时会在论坛上弄明白,所以我转向了标准的例子)。 SocketTlsHandshake我试过了 - 它在所有条件下总是返回false,对问题的解决没有影响。由于证书数据被返回,握手就会通过。即使是头,从其长度来看,也是到达了,但就是不返回MQL代码。错误代码 太笼统了,而且错误本身也值得怀疑。我们需要一个内部人的观点。
如果连接最初是安全的("https://"或端口443或465),则不需要使用SocketTlsHandshake函数。
该函数被用于特殊情况/协议中
如果连接最初是安全的("https://"或端口443或465),则不需要使用SocketTlsHandshake。
该函数被用于特殊情况/协议中
我不使用它。重现该问题的代码见附件。
我不使用它。重现该问题的代码见附件。
用SocketTlsReadAvailable 取代SocketTlsRead
用SocketTlsReadAvailable取代SocketTlsRead
你能说得更具体些吗?在示例文档中,使用的是SocketTlsRead。为什么那里没有使用SocketTlsReadAvailable?
什么时候应该使用一种功能,什么时候应该使用另一种功能?
如何编写阻断从套接字读取的通用代码,适用于受保护和不受保护的连接 - 我们没有SocketReadAvailable函数,是吗?
PS。改变了功能。错误并没有消失。以下是更新后的代码。GetLastError返回0。
在视觉测试器中,从指标中调用CopyTicksRange 函数,以错误4014(ERR_FUNCTION_NOT_ALLOWED)终止。
同样的指标在同一仪器上在线工作正常。有什么问题呢?这个功能在测试器中是否被禁止?在帮助中没有找到任何关于它的说法。
在视觉测试器中,从指标中调用CopyTicksRange 函数,以错误4014(ERR_FUNCTION_NOT_ALLOWED)终止。
同样的指标在同一仪器上在线工作正常。有什么问题呢?这个功能在测试器中是否被禁止?我没有在帮助中找到它。
用真正的蜱虫测试?
没错,这不是我的代码,而是来自开发者的例子(来自MQ的套接字有一些不直观的功能,有时会在论坛上弄明白,所以我转向了标准的例子)。 我试过SocketTlsHandshake - 它在所有条件下总是返回错误,对解决问题没有影响。由于证书数据被返回,握手就会通过。即使是头,从其长度来看,也是到达了,但就是不返回MQL代码。错误代码 太笼统了,而且错误本身也值得怀疑。我们需要一个内部人的观点。
是的,我也很惊讶,没有SocketTlsHandshake,证书会被返回。
但在SocketTlsHandshake函数中,它调用了错误。
行为中存在着某种隐含的逻辑。
UPD。
伊利亚斯的建议已被看到。
是的,没有这个功能,连接就没有问题。
问题在于阅读。
用SocketTlsReadAvailable取代SocketTlsRead
我试着用SocketTlsReadAvailable 进行同样的替换
其行为与SocketTlsRead 相同。
UPD:
在不同的端口上使用SocketTlsHandshake时也存在同样的问题。