错误、漏洞、问题 - 页 2579 1...257225732574257525762577257825792580258125822583258425852586...3184 新评论 [删除] 2019.09.28 07:48 #25781 Roman:它怎么会是一个空字符串?当字符串来自插座时,在其他变体中,虽然它是歪的,但它不是空的。 我不是说你的变体是错的,但在你的变体中,你使用了一个字符串数组。 在我的例子中,它是一个指针。socket函数返回一个指向const wchar_t * 的指针。这就是为什么我把这个错误归咎于mql,因为我试了那么多的C函数,硬生生把+1或+2给解决了。 它只是不会工作。在memcpy() 之后写几行并行到文件中,如果mql是有罪的(在有复制参数的调用之上有一些包装器),那么文件就不会是空的,可能。 HH:嗯,以防万一--µl中的库函数是用链接声明的,对吗?void fn(string& s)? Roman 2019.09.28 08:16 #25782 Vict: 在memcpy()之后并行写几行到文件中,如果是μl的原因(在有复制参数的调用上面有一些包装器),文件不会是空的,我想。 HH:好吧,以防万一--在μl库中函数是用引用来声明的?void fn(string& s)? 所有的字符串我都显示在图表的注释中,或者在打印终端中,当字符串到达时,它是立即可见的,在注释中你可以看到它是否是歪的。 当有大的时间差距时,这根弦很少出现在图表上,而且在打印时也有漏洞。 没有字符串从套接字中进入的疑问已经消失了,勾选数据以毫秒级的速度进入。 从socket getData()中取出一个指针变量,从指针变量中我直接复制到mql,没有包装。 是由风水学宣布的)) #import "ExampleDll.dll" void Func(string task, string & out); #import 一般来说,mql字符串有一个问题。尝试并测试了许多变种。 来自套接字的字符串带有终端空号,最可靠的检查功能是 wcscpy(out, data); или wcsncpy(out, data, wcslen(data)); //wcslen(data)+1 显示了mql上的问题。 一般来说,我将暂时使用sizeof(wichar_t*),然后看看行为。 但可能为了避免MQ的变化,我真的会在数组上写字符串。 Vladimir Simakov 2019.09.28 08:58 #25783 但我想为了避免MQ的变化,我可能真的会把字符串写在数组上。 金句。当然,我想使用字符串,但由于没有标准来描述它的实现和/或将其传入dll时的行为,这纯粹是ub。因此,string in short[],你可以安全地传递数组;唯一的是创建和复制数组 的开销。 PS。不过,我认为问题不在mql,而是在你的代码中。所有的测试都正常通过,字符串在逻辑上没有任何问题,字符串是wchar_t *上的一个微不足道的包装,或者说是wstring上的包装,可能会把它搞砸。 Roman 2019.09.28 09:09 #25784 Vladimir Simakov: 好话说尽。当然,我们想使用字符串,但由于没有标准来描述它在dll中的实现和/或传输行为,这纯粹是ub。因此,string in short[],你可以安全地传递数组;唯一的是创建和复制数组的开销。 PS。不过,我认为问题不在mql,而是在你的代码中。所有测试都正常通过,字符串在逻辑上没有任何问题,字符串是wchar_t *上的一个微不足道的包装,或者说是wstring上的包装,可能会把它搞砸。 我对解放军也有疑虑,我不排除任何可能的原因。但我把从插座上收到的字符串转换成了ASCII码,你可以看到这个字符串是正确的。 接下来是一个简单的副本。 mql不能正确接受字符串指针。 附加的文件: 1.PNG 32 kb [删除] 2019.09.28 09:26 #25785 Roman: 所有的线条我都显示在图表的注释中,或者在打印终端中,当线条出现时,在注释中可以立即看到它是否是歪的。 当有大的时间滞后时,线很少出现在图表上,而在打印时有漏洞。 怀疑来自插座的字符串没有进来,嘀嗒的数据是以毫秒级的速度进来的。 从socket getData()取到指针变量,从指针变量我立即复制到mql,没有包装。 是由风水学宣布的)) 总之,任何关于mql字符串的问题。尝试并测试了许多变种。 来自套接字的字符串带有终端空号,最可靠的检查功能是 显示了mql上的问题。 一般来说,我现在会使用sizeof(wichar_t*),看看行为。 但可能为了避免MQ的变化,我真的会在数组上写字符串。 写入文件--我的意思是在dll方面,如果文件被写入,但没有进入μl,这已经是一个有分量的说法,有bug的说法,也许会被纠正。 而且还有一个没有你希望的包装,MQ从外界隐藏代码/地址,一切都不直接进行。 Roman 2019.09.29 00:35 #25786 Vict: 写入文件--我的意思是在dll方面,如果它写入文件,但没有进入mql,那么它已经是一个有bug主张的有力论据,也许会被纠正。 而且有一个包装,没有你的愿望,MQ隐藏了外界的代码/地址,一切都不直接进行。 将收到的字符串写到一个文件中。 由于socket函数返回了一个指向字符串的指针,一个指向字符串的指针被写入文件,然后这个指针被复制到mql。 使用函数 wcscpy(out, data); 结果字符串的长度为164,mql被分配为200。 StringInit(out, 200, 32); 在mql中收到的复制的字符串是等长的,但是,在复制时有一些空隙。 在mql脚本中,while循环是用Sleep(1)循环的。 附加的文件: 458.PNG 71 kb Roman 2019.09.29 00:51 #25787 而如果你使用函数 wcsncpy(out, data, wcslen(data)); 然后就没有空隙了,但复制的线条不直,行尾有多余的字符。 添加wcslen(data)+1 也没有用。 底线,我在这里写的所有页面中。 mql字符串不能正确接受来自dll的,复制到字符串的指针const wchar_t*。 附加的文件: w6b.PNG 74 kb qjv2.PNG 73 kb 09i3.PNG 6 kb Koldun Zloy 2019.09.29 04:56 #25788 Roman: 正确,我为字符串输出分配了一个缓冲区,并用空格初始化它。 然后我把这个字符串(指针)传给dll。 在dll中wchar_t*数据被复制到out,即也是一个指针。从逻辑上讲,应该没有什么问题。 根据我对帮助的理解,StringInit函数应该设置字符串的长度。 但我对StringInit函数 本身仍有一些问题;我指定了字符串的长度,当我指出指针的大小时,得到了奇怪的结果。 我不明白你说的手动弦长转移是什么意思。 而如果你使用没有指针的sizeof(wchar_t),字符串就会开始漂浮着额外的字符,从而导致解析和泄漏的问题。 为了将字符串传入dll,我使用了Renat的例子,来自他关于如何编写dll的文章。 但不知道为什么,如果我不使用sizeof(wchar_t)指针传递,字符串就会浮动,而使用sizeof(wchar_t*)指针就没有问题。 对我来说,这似乎是合乎逻辑的,我是把字符串作为一个指针复制的,大小应该作为一个指针传递,而不是作为一个类型。 有时你做得很好--它不起作用。 做错了--似乎是有效的。 在这种情况下,你必须做得正确,并在其他地方寻找错误。 Koldun Zloy 2019.09.29 05:00 #25789 Roman: 将得到的字符串写进文件。 由于socket函数返回了一个指向字符串的指针,一个指向字符串的指针被写入文件,然后这个指针被复制到mql。 使用函数 结果字符串的长度为164,mql被分配为200。 在mql中收到的复制的字符串是等长的,但是,在复制时有一些空隙。 在mql脚本中,while循环是用Sleep(1)循环的。 1.在MQL中,复制的是一个字符串,而不是一个指针。 2.你在MQL中选择了一个200字符的字符串。然后你复制了164个字符到里面。之后,看一下MQL中的线的大小。它仍然是200。 Roman 2019.09.29 05:06 #25790 Koldun Zloy: 有时你做得很好--它不起作用。 做错了--似乎是有效的。 在这种情况下,你必须做正确的事情,在其他地方寻找错误。 所以为了弄清楚,我放弃了memcpy,而使用wcscpy或wcsncpy。结果,上面的帖子。 1...257225732574257525762577257825792580258125822583258425852586...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
它怎么会是一个空字符串?当字符串来自插座时,在其他变体中,虽然它是歪的,但它不是空的。
我不是说你的变体是错的,但在你的变体中,你使用了一个字符串数组。
在我的例子中,它是一个指针。
socket函数返回一个指向const wchar_t *
的指针。这就是为什么我把这个错误归咎于mql,因为我试了那么多的C函数,硬生生把+1或+2给解决了。
它只是不会工作。
在memcpy() 之后写几行并行到文件中,如果mql是有罪的(在有复制参数的调用之上有一些包装器),那么文件就不会是空的,可能。
HH:嗯,以防万一--µl中的库函数是用链接声明的,对吗?void fn(string& s)?在memcpy()之后并行写几行到文件中,如果是μl的原因(在有复制参数的调用上面有一些包装器),文件不会是空的,我想。
HH:好吧,以防万一--在μl库中函数是用引用来声明的?void fn(string& s)?所有的字符串我都显示在图表的注释中,或者在打印终端中,当字符串到达时,它是立即可见的,在注释中你可以看到它是否是歪的。
一般来说,mql字符串有一个问题。尝试并测试了许多变种。当有大的时间差距时,这根弦很少出现在图表上,而且在打印时也有漏洞。
没有字符串从套接字中进入的疑问已经消失了,勾选数据以毫秒级的速度进入。
从socket getData()中取出一个指针变量,从指针变量中我直接复制到mql,没有包装。
是由风水学宣布的))
来自套接字的字符串带有终端空号,最可靠的检查功能是
显示了mql上的问题。
一般来说,我将暂时使用sizeof(wichar_t*),然后看看行为。
但可能为了避免MQ的变化,我真的会在数组上写字符串。
金句。当然,我想使用字符串,但由于没有标准来描述它的实现和/或将其传入dll时的行为,这纯粹是ub。因此,string in short[],你可以安全地传递数组;唯一的是创建和复制数组 的开销。
PS。不过,我认为问题不在mql,而是在你的代码中。所有的测试都正常通过,字符串在逻辑上没有任何问题,字符串是wchar_t *上的一个微不足道的包装,或者说是wstring上的包装,可能会把它搞砸。
好话说尽。当然,我们想使用字符串,但由于没有标准来描述它在dll中的实现和/或传输行为,这纯粹是ub。因此,string in short[],你可以安全地传递数组;唯一的是创建和复制数组的开销。
PS。不过,我认为问题不在mql,而是在你的代码中。所有测试都正常通过,字符串在逻辑上没有任何问题,字符串是wchar_t *上的一个微不足道的包装,或者说是wstring上的包装,可能会把它搞砸。
我对解放军也有疑虑,我不排除任何可能的原因。
但我把从插座上收到的字符串转换成了ASCII码,你可以看到这个字符串是正确的。
接下来是一个简单的副本。
mql不能正确接受字符串指针。
所有的线条我都显示在图表的注释中,或者在打印终端中,当线条出现时,在注释中可以立即看到它是否是歪的。
总之,任何关于mql字符串的问题。尝试并测试了许多变种。当有大的时间滞后时,线很少出现在图表上,而在打印时有漏洞。
怀疑来自插座的字符串没有进来,嘀嗒的数据是以毫秒级的速度进来的。
从socket getData()取到指针变量,从指针变量我立即复制到mql,没有包装。
是由风水学宣布的))
来自套接字的字符串带有终端空号,最可靠的检查功能是
显示了mql上的问题。
一般来说,我现在会使用sizeof(wichar_t*),看看行为。
但可能为了避免MQ的变化,我真的会在数组上写字符串。
写入文件--我的意思是在dll方面,如果文件被写入,但没有进入μl,这已经是一个有分量的说法,有bug的说法,也许会被纠正。
而且还有一个没有你希望的包装,MQ从外界隐藏代码/地址,一切都不直接进行。
写入文件--我的意思是在dll方面,如果它写入文件,但没有进入mql,那么它已经是一个有bug主张的有力论据,也许会被纠正。
而且有一个包装,没有你的愿望,MQ隐藏了外界的代码/地址,一切都不直接进行。
将收到的字符串写到一个文件中。
由于socket函数返回了一个指向字符串的指针,一个指向字符串的指针被写入文件,然后这个指针被复制到mql。
使用函数
结果字符串的长度为164,mql被分配为200。
在mql中收到的复制的字符串是等长的,但是,在复制时有一些空隙。
在mql脚本中,while循环是用Sleep(1)循环的。
然后就没有空隙了,但复制的线条不直,行尾有多余的字符。
添加wcslen(data)+1 也没有用。
底线,我在这里写的所有页面中。
mql字符串不能正确接受来自dll的,复制到字符串的指针const wchar_t*。
正确,我为字符串输出分配了一个缓冲区,并用空格初始化它。
然后我把这个字符串(指针)传给dll。
在dll中wchar_t*数据被复制到out,即也是一个指针。从逻辑上讲,应该没有什么问题。
根据我对帮助的理解,StringInit函数应该设置字符串的长度。
但我对StringInit函数 本身仍有一些问题;我指定了字符串的长度,当我指出指针的大小时,得到了奇怪的结果。
我不明白你说的手动弦长转移是什么意思。
而如果你使用没有指针的sizeof(wchar_t),字符串就会开始漂浮着额外的字符,从而导致解析和泄漏的问题。
为了将字符串传入dll,我使用了Renat的例子,来自他关于如何编写dll的文章。
但不知道为什么,如果我不使用sizeof(wchar_t)指针传递,字符串就会浮动,而使用sizeof(wchar_t*)指针就没有问题。
对我来说,这似乎是合乎逻辑的,我是把字符串作为一个指针复制的,大小应该作为一个指针传递,而不是作为一个类型。
有时你做得很好--它不起作用。
做错了--似乎是有效的。
在这种情况下,你必须做得正确,并在其他地方寻找错误。
将得到的字符串写进文件。
由于socket函数返回了一个指向字符串的指针,一个指向字符串的指针被写入文件,然后这个指针被复制到mql。
使用函数
结果字符串的长度为164,mql被分配为200。
在mql中收到的复制的字符串是等长的,但是,在复制时有一些空隙。
在mql脚本中,while循环是用Sleep(1)循环的。
1.在MQL中,复制的是一个字符串,而不是一个指针。
2.你在MQL中选择了一个200字符的字符串。然后你复制了164个字符到里面。之后,看一下MQL中的线的大小。它仍然是200。
有时你做得很好--它不起作用。
做错了--似乎是有效的。
在这种情况下,你必须做正确的事情,在其他地方寻找错误。
所以为了弄清楚,我放弃了memcpy,而使用wcscpy或wcsncpy。
结果,上面的帖子。