错误、漏洞、问题 - 页 2646 1...263926402641264226432644264526462647264826492650265126522653...3184 新评论 Alain Verleyen 2020.02.12 20:40 #26451 Andrei Trukhanovich : 因为该模板只按参数输出类型,而不是按输出值。 这是不准确的。 struct A { int i; double d; }; template<typename T> T f(int value) { T result={0}; return(result); } //+------------------------------------------------------------------+ void OnStart() { A a; int i = 1; a = f<A>(i); } Igor Makanu 2020.02.12 20:42 #26452 Alain Verleyen: 这不是肯定的。 谢谢你! 是的,它可以工作,但在语法上有些混淆。 ZS:现在一切按计划进行的工作。 struct A { long l; uint ui; }; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { A a; uchar u_arr[]; string result = ""; a.l = 0xFFFFFFFFFFFFFFFF; a.ui = 0x0000; //--- проверка работоспособности вывода StructToCharArray(a, u_arr); for(int i = 0; i < ArraySize(u_arr); i++) { result += StringFormat("%x", u_arr[i]); } printf("result = %s", result); // result = ffffffffffffffff0000 //---- string s = StructEncodeBase64(a); Print(s); A b; b = StructDecodeBase64<A>(s); StructToCharArray(b, u_arr); result=""; for(int i = 0; i < ArraySize(u_arr); i++) { result += StringFormat("%x", u_arr[i]); } printf("result = %s", result); } //+------------------------------------------------------------------+ template<typename T> string StructEncodeBase64(T &s_value) { const uchar key[1] = {0}; uchar data[], result[]; StructToCharArray(s_value, data); CryptEncode(CRYPT_BASE64, data, key, result); return(CharArrayToString(result)); } //+------------------------------------------------------------------+ template<typename T> T StructDecodeBase64(string value) { const uchar key[1] = {0}; uchar data[], decode[]; T result; StringToCharArray(value, data, 0, StringLen(value)); CryptDecode(CRYPT_BASE64, data, key, decode); CharArrayToStruct(result, decode); return(result); } POD结构的Base64序列化 Andrei Trukhanovich 2020.02.12 21:39 #26453 Alain Verleyen: 这还不确定。 不,不是的。你注意到函数中模板参数类型的明确设置,而我说的是输出,关于明确设置的问题,fxsaber在我之前回答过。 在你之前 Alain Verleyen 2020.02.13 00:52 #26454 Andrei Trukhanovich : 不,这是对的。你注意到函数中模板参数类型的明确设置,而我说的是输出,关于明确设置的问题,fxsaber在我之前回答过。 在你之前 语言问题。 Igor Makanu 2020.02.13 09:23 #26455 我在论坛和文档中都找不到,所以我有一个问题。 1.MQL5可以存储的最大字符串大小是多少? 2.MQL4可以存储的最大字符串大小是多少? 3.如果没有足够的内存,这个最大的尺寸将被减少(或没有为一个字符串分配内存),还是会发生运行时错误? Sergey Dzyublik 2020.02.13 11:29 #26456 缺陷。( MT5(build 2319)没有修复)模板类缓存操作中的错误:"你用内部类型 "C "创建了复杂的封装对象,几次后发现它是相当不同的数据类型,也许是 "B",也许是 "int",随你怎么想..."。(未 被MT5(build 2319)修复)使用内部类时模板类代码生成的错误。(未修复 MT5(build 2319))定义内部类时的错误--在指定基类时无法明确引用全局命名空间。 建议。ref- 关于需要在MQL中引入类型定义声明功能。参考- 允许强制生成默认的复制构造函数和赋值运算符。 fxsaber 2020.02.13 14:51 #26457 Sergey Dzyublik: 缺陷。 你能保持对你的错误报告的跟踪,这很好。我没有,这就是为什么所有的东西都在论坛上不可挽回地丢失了。 也许你应该在你的错误报告帖子中添加一些相同的哈希记录,这样你就可以一次性地搜索到它们。 Igor Makanu 2020.02.13 16:50 #26458 Igor Makanu: 我在论坛和码头上都找不到,所以我有一个问题。 1.MQL5可以存储的最大字符串大小是多少? 2.MQL4可以存储的最大字符串大小是多少? 3.如果没有足够的内存,这个最大尺寸将被减少(或没有为字符串分配内存),或者会出现运行时错误? 试图在MT4中测试一个字符串 void OnTick() { static bool frun = true; uchar u_arr[102400]; if(frun) { frun = false; string s = ""; while(!IsStopped()) { ArrayInitialize(u_arr, uchar(rand() % 255)); s += CharArrayToString(u_arr); printf("StringLen = %i , m_physical = %i, m_total = %i, m_available = %i, m_used = %i", StringLen(s), TerminalInfoInteger(TERMINAL_MEMORY_PHYSICAL), TerminalInfoInteger(TERMINAL_MEMORY_TOTAL), TerminalInfoInteger(TERMINAL_MEMORY_AVAILABLE), TerminalInfoInteger(TERMINAL_MEMORY_USED)); Sleep(150); } } } //+------------------------------------------------------------------+ 在MT4的日志中,内存泄漏的速度很慢(11.9中的5.1),。 StringLen = 221696000 , m_physical = 12157, m_total = 4095, m_available = 3365, m_used = 729 一般来说,对于合理的任务,你可以使用大的字符串,也许以后我会通过一个字符串复制文件来检查 更新:用 uchar u_ arr [ 524224] 代替uchar u_arr[102400 ];,以加快处理速度。 一句话:在MT4中,可以放入字符串的近似最大值是。 2020.02.13 21:11:24.177 tst_string EURUSD,H1: 内存耗尽 2020.02.13 21:11:24.024 tst_string EURUSD,H1: StringLen = 640601728 , m_physical = 12157, m_total = 4095, m_available = 2556, m_used = 1539 即约640MB SZZ: MT5 2020.02.13 21:56:12.964 tst_string (EURUSD,H1) StringLen = 1073610752 , m_physical = 12157, m_total = 24314, m_available = 21975, m_used = 2339 2020.02.13 21:56:13.140 tst_string (EURUSD,H1) out of memory in 'tst_string.mq5' (41,12) 即约1GB Errors, bugs, questions 保证 MQL5 代码的安全:密码保护,钥匙生成器,时间限制,远程许可证及先进的 EA Alain Verleyen 2020.02.13 20:00 #26459 Igor Makanu : 尝试在MT4中测试字符串 在Win Manager(11.9中的5.1)中,在MT4的日志中,内存有一点泄漏。 StringLen = 221696000 , m_physical = 12157, m_total = 4095, m_available = 3365, m_used = 729 一般来说,对于合理的任务,你可以使用大的字符串,也许以后我会通过一个字符串复制文件来检查 更新:用 uchar u_arr[524224] 代替uchar u_arr[ 102400];,以加快处理速度 一句话:在MT4中,可以放入字符串的近似最大值是。 2020.02.13 21:11:24.177 tst_string EURUSD,H1: 内存耗尽 2020.02.13 21:11:24.024 tst_string EURUSD,H1: StringLen = 640601728 , m_physical = 12157, m_total = 4095, m_available = 2556, m_used = 1539 即约640MB SZZ: MT5 2020.02.13 21:56:12.964 tst_string (EURUSD,H1) StringLen = 1073610752 , m_physical = 12157, m_total = 24314, m_available = 21975, m_used = 2339 2020.02.13 21:56:13.140 tst_string (EURUSD,H1) out of memory in 'tst_string.mq5' (41,12) 即约1GB 这是Unicode的字符串长度,所以以MB为单位,它至少是两倍。MT4为1.3GB,这是有道理的,因为你需要一个连续的内存缓冲区,而MT4是一个32位的应用程序。因此,mql4的限制本身并不是一种限制,而只是受到可用内存的限制。 我有点惊讶MT5不允许更多,因为看起来你有很多可用的内存。我这边会尽力而为。 Igor Makanu 2020.02.13 20:18 #26460 Alain Verleyen: 这是Unicode的字符串长度,所以在MB中,它至少是两倍。MT4为1.3GB,这是有道理的,因为你需要一个连续的内存缓冲区,而MT4是一个32位的应用程序。所以mql4本身的限制并不是一个限制,它只是受限于可用的内存。 我有点惊讶MT5不允许更多,因为看起来你有很多可用的内存。我这边会尽力而为。 我有12gb的内存,Windows 10,可用内存约8gb。 我需要这个测试来找出mt4/mt5终端中允许的最大线长 我现在想通过Redis数据库在终端之间进行交换 Redis是一个非常简单的数据库,只对字符串工作(key - value --> strin - string)。 昨天我用Base64序列化了POD结构,它使数据大小增加了约1/3。 我认为,即使在这种情况下,我也有可能交换每笔交易大小为400Mb的结构--这对任何目的来说都是绰绰有余的!;) 1...263926402641264226432644264526462647264826492650265126522653...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
因为该模板只按参数输出类型,而不是按输出值。
这是不准确的。
这不是肯定的。
谢谢你!
是的,它可以工作,但在语法上有些混淆。
ZS:现在一切按计划进行的工作。
POD结构的Base64序列化这还不确定。
不,不是的。你注意到函数中模板参数类型的明确设置,而我说的是输出,关于明确设置的问题,fxsaber在我之前回答过。 在你之前
不,这是对的。你注意到函数中模板参数类型的明确设置,而我说的是输出,关于明确设置的问题,fxsaber在我之前回答过。 在你之前
我在论坛和文档中都找不到,所以我有一个问题。
1.MQL5可以存储的最大字符串大小是多少?
2.MQL4可以存储的最大字符串大小是多少?
3.如果没有足够的内存,这个最大的尺寸将被减少(或没有为一个字符串分配内存),还是会发生运行时错误?
缺陷。
( MT5(build 2319)没有修复)模板类缓存操作中的错误:"你用内部类型 "C "创建了复杂的封装对象,几次后发现它是相当不同的数据类型,也许是 "B",也许是 "int",随你怎么想..."。
(未 被MT5(build 2319)修复)使用内部类时模板类代码生成的错误。
(未修复 MT5(build 2319))定义内部类时的错误--在指定基类时无法明确引用全局命名空间。
建议。
ref- 关于需要在MQL中引入类型定义声明功能。
参考- 允许强制生成默认的复制构造函数和赋值运算符。
缺陷。
你能保持对你的错误报告的跟踪,这很好。我没有,这就是为什么所有的东西都在论坛上不可挽回地丢失了。
也许你应该在你的错误报告帖子中添加一些相同的哈希记录,这样你就可以一次性地搜索到它们。
我在论坛和码头上都找不到,所以我有一个问题。
1.MQL5可以存储的最大字符串大小是多少?
2.MQL4可以存储的最大字符串大小是多少?
3.如果没有足够的内存,这个最大尺寸将被减少(或没有为字符串分配内存),或者会出现运行时错误?
试图在MT4中测试一个字符串
在MT4的日志中,内存泄漏的速度很慢(11.9中的5.1),。
StringLen = 221696000 , m_physical = 12157, m_total = 4095, m_available = 3365, m_used = 729
一般来说,对于合理的任务,你可以使用大的字符串,也许以后我会通过一个字符串复制文件来检查
更新:用 uchar u_ arr [ 524224] 代替uchar u_arr[102400 ];,以加快处理速度。
一句话:在MT4中,可以放入字符串的近似最大值是。
2020.02.13 21:11:24.177 tst_string EURUSD,H1: 内存耗尽
2020.02.13 21:11:24.024 tst_string EURUSD,H1: StringLen = 640601728 , m_physical = 12157, m_total = 4095, m_available = 2556, m_used = 1539
即约640MB
SZZ: MT5
2020.02.13 21:56:12.964 tst_string (EURUSD,H1) StringLen = 1073610752 , m_physical = 12157, m_total = 24314, m_available = 21975, m_used = 2339
2020.02.13 21:56:13.140 tst_string (EURUSD,H1) out of memory in 'tst_string.mq5' (41,12)
尝试在MT4中测试字符串
在Win Manager(11.9中的5.1)中,在MT4的日志中,内存有一点泄漏。
StringLen = 221696000 , m_physical = 12157, m_total = 4095, m_available = 3365, m_used = 729
一般来说,对于合理的任务,你可以使用大的字符串,也许以后我会通过一个字符串复制文件来检查
更新:用 uchar u_arr[524224] 代替uchar u_arr[ 102400];,以加快处理速度
一句话:在MT4中,可以放入字符串的近似最大值是。
2020.02.13 21:11:24.177 tst_string EURUSD,H1: 内存耗尽
2020.02.13 21:11:24.024 tst_string EURUSD,H1: StringLen = 640601728 , m_physical = 12157, m_total = 4095, m_available = 2556, m_used = 1539
即约640MB
SZZ: MT5
2020.02.13 21:56:12.964 tst_string (EURUSD,H1) StringLen = 1073610752 , m_physical = 12157, m_total = 24314, m_available = 21975, m_used = 2339
2020.02.13 21:56:13.140 tst_string (EURUSD,H1) out of memory in 'tst_string.mq5' (41,12)
这是Unicode的字符串长度,所以以MB为单位,它至少是两倍。MT4为1.3GB,这是有道理的,因为你需要一个连续的内存缓冲区,而MT4是一个32位的应用程序。因此,mql4的限制本身并不是一种限制,而只是受到可用内存的限制。
我有点惊讶MT5不允许更多,因为看起来你有很多可用的内存。我这边会尽力而为。
这是Unicode的字符串长度,所以在MB中,它至少是两倍。MT4为1.3GB,这是有道理的,因为你需要一个连续的内存缓冲区,而MT4是一个32位的应用程序。所以mql4本身的限制并不是一个限制,它只是受限于可用的内存。
我有点惊讶MT5不允许更多,因为看起来你有很多可用的内存。我这边会尽力而为。
我有12gb的内存,Windows 10,可用内存约8gb。
我需要这个测试来找出mt4/mt5终端中允许的最大线长
我现在想通过Redis数据库在终端之间进行交换
Redis是一个非常简单的数据库,只对字符串工作(key - value --> strin - string)。
昨天我用Base64序列化了POD结构,它使数据大小增加了约1/3。
我认为,即使在这种情况下,我也有可能交换每笔交易大小为400Mb的结构--这对任何目的来说都是绰绰有余的!;)