如何检查一个订单是否被选中 - 页 18

 
事实上,错误就在第一篇文章中,我不像话题作者那样,把所有的动作都写下来了,也就是说,我只写了已经测试过的内容。
 
keekkenen:
你对如何写代码的看法并不重要,最主要的是代码能正确工作,而不是拿着你的代码问你哪里出错了......再说一遍,如果票据正确,就不会有4105错误。

你所说的是不真实的,因为错误4105发生在调用 不需要传递票据的函数时

例如,当OrderTicket()被调用时,如果OrderSelect()在OrderTicket()被调用之前没有被调用--这就是本主题讨论的情况。

 

不,我的意思是,无论向外的转换(输出)如何,都要保证选择我对每个函数的顺序。

即为你的每个功能保存最后选择的订单

 
FAQ:

不,我的意思是,无论向外的转换(输出)如何,都要保证选择我对每个函数的顺序。

即为每个函数保存最后选择的顺序,作为它自己的

如果有几个嵌套的函数控制最后选择的 订单--即一个函数调用另一个,另一个调用第三个,那么每个函数将保持它被调用时的订单选择,并在返回时将选择返回到该状态,如果我对问题的理解正确的话。但这是一个非常棘手的解决方案。通常情况下,超过一级的嵌套是不可能的。最主要的是控制每一个这样的函数的环境,这样调用这个函数就不会因为重设之前的订单选择而导致逻辑错误。只有那些可以从订单检索的主循环中调用的服务函数才需要这样做,并且仍然要检索订单本身,以便计算任何东西。

 

顺便说一下,如果服务功能在库中 - 那么就不需要保存 "指针"(订单选择),是吗?由于主EA和库有各自的 "指针",即在库中选择的订单不会在EA中选择,反之亦然。

如果函数A和B都不在同一个模块内,这似乎是一个完美的问题解决方案

 

思想:有一个订单选择 功能(每个人都有一个),外面有必要的过滤器(无论如何,在每个功能中,你必须在某个地方选择这个订单(很可能在开始时))。

int OrdersTicket(filters, int function_id, bool new = false){static int tickets[functions count];int ticket = -1;
   if(!new){
      if(OrderSelect(tickets[function_id],SELECT_BY_TICKET)){return(OrderTicket());}
   }
   // Выбор и возврат тикета ордера с нужными фильтрами
   return(ticket);
}

这肯定会返回之前挑选的订单的票据(在这个函数中),否则就用我们指定的过滤器做一个新的搜索。

在这种情况下,ticket = OrdersTicket(); 结构将完美地工作。

 
Ant_TL:

你所说的是不真实的,因为错误4105发生在调用不需要传递票据的函数时。

例如,当OrderTicket()被调用时,如果OrderSelect()在OrderTicket()被调用前没有被调用--这就是本主题讨论的情况。


你从EA设置中获得票据,外部文件--从哪里来?

如果是这样,那么是的,会有一个错误,因为调用OrderSelect()的 事实在随后的刻度上仍然是开始的(至少在测试者中),...

 
Ant_TL:

顺便说一下,如果服务功能在库中 - 那么就不需要保存 "指针"(订单选择),是吗?由于主EA和库有各自的 "指针",即在库中选择的订单不会在EA中选择,反之亦然。

如果函数A和B都不在同一个模块内,这似乎是一个完美的问题解决方案


这完全取决于外部变量的全球化程度。
 
Ant_TL:

顺便说一下,如果服务功能在库中 - 那么就不需要保存 "指针"(订单选择),是吗?由于主EA和库有各自的 "指针",即在库中选择的订单不会在EA中选择,反之亦然。

如果函数A和B都不在同一个模块内,这似乎是一个完美的问题解决方案


我就不说了。其他方面无法帮助你。绕来绕去没有我!!!。
 
FAQ:

这完全取决于外部变量的全局性如何。

具体来说,"指针"--当前订单选择 的状态--在模块内是全局性的,也就是说,这个指针对库来说是一样的,对程序模块来说是不同的。这意味着,如果程序中的函数A在循环中选择了一些顺序,然后调用库中的辅助函数B,那么即使在其运行过程中B选择了另一个顺序,在返回时也不应该改变函数A的顺序选择。但如果这两个函数都位于一个模块内,当从B返回时,当前的顺序选择应该在A本身调用B之前和之后被存储和恢复,或者在B开始和完成工作时被存储和恢复,这样A的工作逻辑在此时就不会被违反。