Donnez-moi SetLastError ! !! - page 4

 
sergeev:

Vous n'avez toujours pas écrit comment votre suggestion contribuera à améliorer le MQL. Jusqu'à présent, il s'agit juste de simples demandes, dont vous seul avez besoin, dans un but peu clair.

J'ai déjà écrit au début que MQL5 a cet effet, alors que dans MQL4 il peut être amélioré en donnant de la visibilité à last_error. J'ai résolu le problème pour la deuxième fois avec deux fonctions maison. Seulement maintenant ce n'est pas last_error mais plutôt la première dernière erreur plus la possibilité de codes d'erreur personnalisés comme dans MQL5.
 
Roger:

Ce n'est pas bon, car si vous avez eu une erreur lors d'une opération précédente et que vous ne l'avez pas traitée, alors s'il n'y a pas d'erreur dans l'opération en cours, vous traiterez la précédente.

Oui tout est ok si vous n'appelez pas GetLastError mais seulement à partir d'une fonction qui retourne une fausse erreur et qui a déjà changé le code d'une éventuelle erreur précédente en une nouvelle !
 
vit46:

Oui, tout va bien si vous n'appelez pas GetLastError mais seulement à partir d'une fonction qui renvoie une fausse erreur et qui a déjà changé le code d'une éventuelle erreur précédente en une nouvelle !

En vérifiant l'erreur dans une fonction supplémentaire, vous la rendez nulle. Cependant, si vous avez des endroits du code où vous ne vérifiez pas si une erreur se produit mais qu'elle risque de se produire, vous risquez de rencontrer une erreur inappropriée.
 
Roger:

En vérifiant l'erreur dans la fonction supplémentaire, vous la supprimez.


Non, je ne l'efface pas :

// глобально видимая переменная для всей программы
int last_error_fifo = 0;

int GetError()
   {
   if (last_error_fifo == 0)
      {
      last_error_fifo = GetLastError();
      }
   return(last_error_fifo);
   }

void SetError(int errcode)
   {
   last_error_fifo = errcode;
   // Это можно делать и напрямую, но только установку ошибки или сброс.
   // Для чтения ошибки только GetError() иначе GetLastError не сработает.
   }
 

Quelqu'un peut-il recommander la fonction de traitement des erreurs la plus décente (à votre avis) ?

 
charter:

Quelqu'un peut-il recommander la fonction de traitement des erreurs la plus décente (à votre avis) ?


Il n'y a pas grand-chose à choisir... faites avec ce que vous avez... ou ne pas faire un appel inconditionnel à GetLastError
 
vit46:


Non, je ne le remets pas à zéro :


Qu'est-ce que c'est ?

last_error_fifo = GetLastError();
 
vit46:

Ce n'est pas vraiment un choix... faire avec ce que l'on a... ou de ne pas faire un appel inconditionnel à GetLastError

Non, je ne parle pas de l'information sur les erreurs, je parle du "comportement correct" de l'EA lorsqu'une erreur se produit/détecte une erreur.
 
Roger:


Qu'est-ce que c'est ?


Ce n'est pas une mise à zéro inconditionnelle mais seulement si last_error_fifo == 0. En bref, c'est la même chose que les œufs en profil. Vérifier ce que la fonction a retourné avant de vérifier les erreurs.
 
charter:

Non, je ne parle pas de l'information sur les erreurs, mais du "comportement correct" de l'EA lorsqu'une erreur se produit/détecte une erreur.

Cela dépend de votre logique. Après tout, vous ne pouvez pas traiter toutes les erreurs, et vous ne pouvez traiter que celles qui sont importantes dans une situation donnée.