错误、漏洞、问题 - 页 2575 1...256825692570257125722573257425752576257725782579258025812582...3184 新评论 Vladimir Simakov 2019.09.25 18:52 #25741 Roman: 内存在mql代码中被分配为 出,并作为分配内存的 指针传递,因为mql中的字符串在dll中是wichar_t*。 哦,多么混乱... 我不知道字符串的实现,我只能猜测,但根据错误判断,字符串输出在堆栈上创建了一个初始化为0x0000000000的指针,你可以安全地解除对dll中空指针的引用。 Vladimir Simakov 2019.09.25 19:00 #25742 Vladimir Simakov:哦,这太复杂了......我不知道字符串的实现,我只能猜测,但根据错误判断,字符串输出在堆栈上创建了一个初始化为0x0000000000的指针,你可以安全地解除对dll中空指针的引用。 对不起,没有注意到StringInit(()。 Vladimir Simakov 2019.09.25 19:11 #25743 Roman: 内存在mql代码中被分配为 出,并作为分配内存的 指针传递,因为mql中的字符串在dll中是wchar_t*。 挖掘一下Dll本身,有些东西很可能就在那里。最近,我一直在从mql向第三方的C++/C#应用程序输送数据,一点问题都没有。 Roman 2019.09.25 20:15 #25744 Vladimir Simakov: 挖掘一下dll本身,那里可能有一些东西。最近,我一直在从mql向第三方C++/C#应用程序输送数据,一点问题都没有。 dll很简单,不需要清楚,想法本身就显示出来了。 wchar_t* out = L""; const wchar_t* data = L""; while(condition) { data = getData(); //getData библиотечная функция возвращает const wchar_t* wcscpy(out, data); } 将结果数据输出到控制台,控制台中的所有行都是清晰的,没有空隙,也没有闪失。 我通过wcscpy(out, data)将结果传递给mql,但现在我遇到了问题。 但如果我通过手写的检查字符串。 wchar_t* out = L""; const wchar_t* data = L""; while(condition) { data = L"{\"p\":\"2000\"}"; //проверочная строка wcscpy(out, data); } 不知道为什么,我没有遇到问题。 嗯,mql中的string类型 是否考虑终端空wchar_t *? 附加的文件: gzldqj_a9xo9p4.PNG 429 kb t23sse_vhht8p56u.PNG 36 kb v42vbjjnta2_4a3r9t.PNG 44 kb Maksim Emeliashin 2019.09.26 01:15 #25745 建议扩大一点OnTimer()事件的可能性 此刻,当EventSetTimer()函数设置了调用的周期后,OnTimer()事件开始发生。 事实证明,以下是专家顾问。 bool timer_set = false; int OnInit() { return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ void OnDeinit(const int reason) { EventKillTimer(); } //+------------------------------------------------------------------+ void OnTick() { if (!timer_set) { // -- имитация включения советника в какое-то // -- случайное время string time = TimeToString(TimeTradeServer(), TIME_DATE | TIME_MINUTES | TIME_SECONDS); if (TimeCurrent() >= D'2019.09.24 3:47:40') { EventSetTimer(600); timer_set = true; } } } //+------------------------------------------------------------------+ void OnTimer() { //--- string time = TimeToString(TimeTradeServer(), TIME_DATE | TIME_MINUTES | TIME_SECONDS); printf("Current time: %s", time); } //+------------------------------------------------------------------+ 输出大约如下。 QJ 0 07:53:10.369 test_timer (GBPUSD_i,D1) 2019.09.24 03:57:41 Current time: 2019.09.24 03:57:41 NF 0 07:53:11.246 test_timer (GBPUSD_i,D1) 2019.09.24 04:07:41 Current time: 2019.09.24 04:07:41 然而,通常在另一个柱状体出现后检查信号的发生就足够了。 例如,事实证明,例如PERIOD_M15,条形图出现在00:15:00,但专家顾问的检查只能在00:29:59检查。 也就是说,为了获得或多或少的稳定和平等的结果,无论专家顾问的启动时间如何。 你需要为较短的时间间隔设置一个定时器,或者另外使用OnTick()。 正如实验所显示的,它极大地减慢了策略测试器的测试速度。 建议。 增加一个函数,允许设置OnTimer事件开始计数的初始时间。 例如,一些函数EventSetTimerFrom(const datetime SinceDT),可以让你在一个新的条形图后几秒钟内设置定时器的调用。 Roman 2019.09.26 02:44 #25746 Roman: dll很简单,为了清晰起见,多余的东西已经被删除,想法已经显示出来。 我把结果粘贴到控制台,所有的线条都很好,没有间隙,没有故障。 我通过wcscpy(out, data) 将结果传递给mql,但现在我遇到了问题。 但如果我通过手写的检查字符串。 不知道为什么,我没有遇到问题。 嗯,mql中的string类型 是否考虑终端空wchar_t *? 但这个功能是有效的。 wcsncpy(out, data, wcslen(data)); 但它不太对,在字符串的末尾似乎有一个坏字符,一个额外的括号}出现后又消失了。 wcslen(data)+1 wcslen(data)+2 没有任何帮助。 并得到解析,没有错误,没有泄漏。 不知道在mql-looking字符串中一个字符的长度或大小是什么? 字符串类型肯定有错误。 而在很久以前的一篇文章 第3.3段传递和修改字符串中,这个例子很可能犯了一个错误。 _DLLAPI void fnReplaceString(wchar_t *text, wchar_t *from, wchar_t *to) { wchar_t *cp; //проверка параметров if(text==NULL || from==NULL || to==NULL) return; if(wcslen(from)!=wcslen(to)) return; //поищем подстроку if((cp=wcsstr(text,from))==NULL) return; //заменим memcpy(cp,to,wcslen(to)*sizeof(wchar_t)); //в этой строке должен быть указатель sizeof(wchar_t *) } 也许在终端代码的某个地方,mql字符串转换的工作方式是一样的,没有指针。 fxsaber 2019.09.26 02:59 #25747 Maksim Emeliashin: 设置OnTimer事件开始倒计时的初始时间。 你可以自己通过重复调用EventSetTimer来完成这个任务。请注意,在账户中(不是在测试器中),计时器是浮动的,需要不断调整。 Maksim Emeliashin 2019.09.26 03:16 #25748 fxsaber: 你可以自己通过重复调用EventSetTimer来完成这个任务。请记住,在账户上(而不是在测试器中),定时器是浮动的,需要不断调整。 谢谢你,有用的东西! 当然,非常奇怪的是,如此简单的一点在终端 "开箱 "时没有被考虑到。 Vladimir Simakov 2019.09.26 06:09 #25749 Roman: 但这个功能是有效的。 但这似乎有点尴尬,在字符串的末尾出现或消失了一个额外的小括号}。 wcslen(data)+1 wcslen(data)+2 没有任何帮助。 并得到解析,没有错误,没有泄漏。 不知道在mql-looking字符串中一个字符的长度或大小是什么? 字符串类型肯定有错误。 而在很久以前的一篇文章 第3.3段传递和修改字符串中,这个例子很可能犯了一个错误。 也许在终端代码的某个地方,mql字符串转换的工作方式是一样的,没有指针。 getData() dig.我有一种感觉,那里有一个问题。 [删除] 2019.09.26 10:24 #25750 Roman: dll很简单,为了清晰起见,它已经被删除了,想法是这样的 你的例子很有趣,你删除了所有的东西,留下了UB(对字符串字面的修改),每个人都要心灵感应。如果你期望得到一些聪明的建议,请给出最小的工作代码(在两边),否则就是垃圾。 1...256825692570257125722573257425752576257725782579258025812582...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
内存在mql代码中被分配为
出,并作为分配内存的 指针传递,因为mql中的字符串在dll中是wichar_t*。
哦,多么混乱...
我不知道字符串的实现,我只能猜测,但根据错误判断,字符串输出在堆栈上创建了一个初始化为0x0000000000的指针,你可以安全地解除对dll中空指针的引用。
哦,这太复杂了......
我不知道字符串的实现,我只能猜测,但根据错误判断,字符串输出在堆栈上创建了一个初始化为0x0000000000的指针,你可以安全地解除对dll中空指针的引用。
内存在mql代码中被分配为
出,并作为分配内存的 指针传递,因为mql中的字符串在dll中是wchar_t*。
挖掘一下Dll本身,有些东西很可能就在那里。最近,我一直在从mql向第三方的C++/C#应用程序输送数据,一点问题都没有。
挖掘一下dll本身,那里可能有一些东西。最近,我一直在从mql向第三方C++/C#应用程序输送数据,一点问题都没有。
dll很简单,不需要清楚,想法本身就显示出来了。
将结果数据输出到控制台,控制台中的所有行都是清晰的,没有空隙,也没有闪失。
我通过wcscpy(out, data)将结果传递给mql,但现在我遇到了问题。
但如果我通过手写的检查字符串。
不知道为什么,我没有遇到问题。
嗯,mql中的string类型 是否考虑终端空wchar_t *?
建议扩大一点OnTimer()事件的可能性
此刻,当EventSetTimer()函数设置了调用的周期后,OnTimer()事件开始发生。
事实证明,以下是专家顾问。
输出大约如下。
然而,通常在另一个柱状体出现后检查信号的发生就足够了。
例如,事实证明,例如PERIOD_M15,条形图出现在00:15:00,但专家顾问的检查只能在00:29:59检查。
也就是说,为了获得或多或少的稳定和平等的结果,无论专家顾问的启动时间如何。
你需要为较短的时间间隔设置一个定时器,或者另外使用OnTick()。
正如实验所显示的,它极大地减慢了策略测试器的测试速度。
建议。
增加一个函数,允许设置OnTimer事件开始计数的初始时间。
例如,一些函数EventSetTimerFrom(const datetime SinceDT),可以让你在一个新的条形图后几秒钟内设置定时器的调用。
dll很简单,为了清晰起见,多余的东西已经被删除,想法已经显示出来。
我把结果粘贴到控制台,所有的线条都很好,没有间隙,没有故障。
我通过wcscpy(out, data) 将结果传递给mql,但现在我遇到了问题。
但如果我通过手写的检查字符串。
不知道为什么,我没有遇到问题。
嗯,mql中的string类型 是否考虑终端空wchar_t *?
但这个功能是有效的。
但它不太对,在字符串的末尾似乎有一个坏字符,一个额外的括号}出现后又消失了。
wcslen(data)+1
wcslen(data)+2
没有任何帮助。
并得到解析,没有错误,没有泄漏。
不知道在mql-looking字符串中一个字符的长度或大小是什么?
字符串类型肯定有错误。
而在很久以前的一篇文章 第3.3段传递和修改字符串中,这个例子很可能犯了一个错误。
也许在终端代码的某个地方,mql字符串转换的工作方式是一样的,没有指针。
设置OnTimer事件开始倒计时的初始时间。
你可以自己通过重复调用EventSetTimer来完成这个任务。请注意,在账户中(不是在测试器中),计时器是浮动的,需要不断调整。
你可以自己通过重复调用EventSetTimer来完成这个任务。请记住,在账户上(而不是在测试器中),定时器是浮动的,需要不断调整。
谢谢你,有用的东西!
当然,非常奇怪的是,如此简单的一点在终端 "开箱 "时没有被考虑到。
但这个功能是有效的。
但这似乎有点尴尬,在字符串的末尾出现或消失了一个额外的小括号}。
wcslen(data)+1
wcslen(data)+2
没有任何帮助。
并得到解析,没有错误,没有泄漏。
不知道在mql-looking字符串中一个字符的长度或大小是什么?
字符串类型肯定有错误。
而在很久以前的一篇文章 第3.3段传递和修改字符串中,这个例子很可能犯了一个错误。
也许在终端代码的某个地方,mql字符串转换的工作方式是一样的,没有指针。
dll很简单,为了清晰起见,它已经被删除了,想法是这样的
你的例子很有趣,你删除了所有的东西,留下了UB(对字符串字面的修改),每个人都要心灵感应。如果你期望得到一些聪明的建议,请给出最小的工作代码(在两边),否则就是垃圾。