//--- отключим показ ценового графикаChartSetInteger(0,CHART_SHOW,false);
long chart=ChartID();
CGraphic graphic;
Print("0 Тут ошибка ",GetLastError()," ",cLng::CodeDescription(GetLastError()));
ResetLastError();
if(ObjectFind(chart,name)<0)
{
Print("1 Тут ошибка ",GetLastError()," ",cLng::CodeDescription(GetLastError()));
ResetLastError();
graphic.Create(chart,name,0,0,0,pix_X,pix_Y);//Создает графический ресурс, привязанный к объекту чарта Print("2 Тут ошибка ",GetLastError()," ",cLng::CodeDescription(GetLastError()));
ResetLastError();
}
下面是结果
2019.02.1708:55:19.845 Test_4G_CB (Si Splice,H1) 0 Тут ошибка 0 Операция выполнена успешно
2019.02.1708:55:19.860 Test_4G_CB (Si Splice,H1) 1 Тут ошибка 4202 Графический объект не найден
2019.02.1708:55:19.860 Test_4G_CB (Si Splice,H1) 2 Тут ошибка 4202 Графический объект не найден
CCurve *D=graphicT.CurveAdd(X_04,Y_04,ColorToARGB(DarkOrange,256),CURVE_POINTS,Interval_04);//Создает и добавляет кривую на график
D.PointsFill(false);//Устанавливает флаг, указывающий, нужно ли выполнять заливку для точек, определяющих кривую при отрисовке точками.
D.PointsType(POINT_VERTICAL_DASH);//Устанавливает флаг, указывающий на тип точек, использующихся при отрисовке кривой точками.
关于交易、自动交易系统和策略测试的论坛
初学者的常见问题 MQL5 MT5 MetaTrader 5
Aleksey Vyazmikin, 2019.02.17 06:56
我决定再次重复这个实验,以下是代码
下面是结果
知道是什么原因导致了这个错误吗?心灵感应者正在度假。而对于普通人,我们需要。
你在哪里被告知有一个错误?我告诉过你--在库中寻找可能被写入_LastError变量的点。这不一定是有错误的代码已经工作了。因为它可能会搜索一个对象(如果没有,错误代码 将被写入变量)并创建它。但如果对象不会被创建,那就是一个错误,但它会被创建,一切都会成功。但在检查后,错误代码(对象在创建前不存在)将被写入一个变量,然后你在代码中读取。
心灵感应者正在休假。对普通人来说,需要的是。
1.编码
2.日志中没有预期的错误信息
3.Windows 7 Home 32位,build 1940,测试期间未连接到服务器--经纪人发现。
你在哪里被告知有一个错误?我告诉过你--在库中寻找一个片段,它可能被写入_LastError变量。这不一定是有错误的代码已经工作了。因为它可能会搜索一个对象(如果没有,错误代码 将被写入变量)并创建它。但如果对象不会被创建,那就是一个错误,但它会被创建,一切都会成功。但在检查后,错误代码(对象在创建前不存在)将被写入一个变量,然后你在代码中读取。
库必须在有实际错误时产生一个错误,或者正确处理这种情况,在没有错误时不产生错误。如果我对库的使用在检查错误时没有在类中描述,你应该指定它。无论如何,用户编辑产品的制造商库是不合理的。
库必须在有实际错误时产生一个错误,或者正确处理这种情况,在没有错误时不产生错误。如果我对库的使用在检查错误时没有在类中描述,你应该指定它。无论如何,用户编辑产品的制造商库是不合理的。
那里没有错误,再读一遍。
你在哪里被告知有一个错误?我告诉过你--在库中寻找一个片段,它可能被写入_LastError变量。这不一定是有错误的代码已经工作了。因为它可能会搜索一个对象(如果没有,错误代码 将被写入变量)并创建它。但如果对象不会被创建,那就是一个错误,但它会被创建,一切都会顺利进行。但在检查后,错误代码(对象在创建前不存在)将被写入一个变量,然后你将在你的代码中读取。
所以你只需要知道为什么你在代码正常执行后读到了错误。你很可能不明白的是,在_LastError变量中出现0以外的代码,并不一定意味着CGraphic的代码中存在错误,而不仅仅是它。在这种情况下,它可能是搜索一个对象存在的简单结果,该对象在SB的CGraphic内执行。有一个按名称请求的对象,结果返回-1,代码4202被写进_LastError。然后该对象被创建,一切正常,并被返回到调用程序。而在那里,你立即阅读错误代码 并得到它。但是没有错误--你在SB里面看到了查询的结果。
我只是为你所报告的情况提出了一个可能的原因。
因此,如果你真的想找到一个真正的错误并报告它,你需要在调试器中浏览整个CGraphic代码,并抓住会导致逻辑和性能故障的真正错误,而不是仅仅声称你读到了错误代码,因此--它肯定存在。
那里没有错误,再读一遍。
所以--你只需要知道为什么你在正常的代码执行后会读到错误。你可能不明白,_LastError变量的内容不为零,并不一定意味着CGraphic代码中存在错误,而且不仅仅是在其中。在这种情况下,它可能是一个搜索对象存在的简单结果,它是在SB的CGraphic内执行的。有一个按名称请求的对象,结果返回-1,代码4202被写进_LastError。然后该对象被创建,一切正常,并被返回到调用程序。而在那里,你立即阅读错误代码 并得到它。但根本没有错误--你在SB里面看到了查询的结果。
我只是为你所报告的情况提出一个可能的原因。
因此,如果你真的想找到真正的错误并报告它,那么你需要在调试器中浏览整个CGraphic代码,并抓住会导致逻辑和操作失败的真正错误,而不是仅仅声称你已经读到了错误代码,因此--它肯定存在。
你自己在逻辑推理中说,代码中可能有一个错误,它表现为不重置错误。这是因为在创建之前缺乏一个对象而收到的。
不,我没有能力在复杂的代码中寻找一个错误,然后得到的答案是它本来就是这样的。
你能告诉我这个消息是否是用户的错误?
指向这个的代码是D.PointsFill(false)。
你自己在逻辑推理中表示,代码中可能有一个错误,它是通过不重置错误来表达的。这是因为在创建对象之前没有收到。
不,我没有能力在复杂的代码中寻找一个错误,然后得到的答案是它本来就是这样的。
你能告诉我这个消息是否是用户的错误?
它指向这段代码 -D.PointsFill(false)。
我完全不明白这句话的意思。
在我看来,我已经向你详细地描述了一切。
我不知道。信息不多。
我完全不明白这句话的意思。
在我看来,我已经向你详细地解释了一切。
我不知道。信息不多。
你不明白,如果你的代码是建立在对错误的反应上(我们在错误的情况下创建一个对象),那么在修复错误(创建一个对象)之后,重置这个错误是合乎逻辑的,根据你的逻辑推理,在库中没有这样做。
在这里,我也不知道如何应对这个错误......
你不明白,如果代码是建立在错误响应的基础上(在错误的情况下,我们创建一个对象),那么在错误纠正(对象创建)之后,重置这个错误是合乎逻辑的,根据你的逻辑推理,库中没有这样做。
在这里,我没有关于如何应对这个错误的信息......。
你必须清楚地知道,不是_LastError中不等于0的代码是错误的,而是由函数返回的结果指向这个函数的错误执行。而_LastError包含的代码正好指向那个导致函数错误执行的错误。所以,你可以使用存储在服务变量中的错误代码的描述,而不是直接使用函数的返回代码,这一点值得怀疑。如果函数返回-1或false或0(对于每个函数,其错误代码在帮助中都有描述),那么--只有对函数返回的结果的分析应该由你来处理,而不是_LastError中的代码,它并不表示错误,而是用来表示函数返回的某些结果的原因。
对象搜索函数在给定名称的对象不存在的情况下返回一个小于0的值。这是一个错误吗?不,这是一个函数的常规响应,在此基础上,你对创建一个具有给定名称的对象做出决定。包含在_LastError中的代码明确地说,"具有请求名称的对象不存在" - 你可以创建它。
好吧,我已经厌倦了向你解释。谁愿意,谁就会明白。