Geben Sie mir SetLastError!!!

 

Mit GetLastError() wird die spezielle Variable last_error gelöscht. Und so werden alle möglichen außer erwartetem if (GetLastError() == 4066) zum Beispiel ausgeblendet.

Ich möchte last_error selbst verwenden, aber es ist unsichtbar.

Die Variable _LastError() wird in MT5 GetLastError() nicht geleert. Dem Himmel sei Dank! ResetLastError() wurde für diesen Zweck erfunden!

Außerdem haben wir die Funktion SetUserError(user_error) hinzugefügt, die Benutzerfehler wie folgt zählt:

_LastError = 65536 + user_error.

Offensichtlich wird eine Variable verwendet, um den letzten Fehler zu speichern, so dass es im Grunde eine unnötige Optimierung ist.

Sie könnten einfach SetLastError hinzufügen und das wäre genug! Idealerweise sollten Sie last_error sichtbar machen.

Ein fortgeschrittener Programmierer würde selbst herausfinden, wie er seine Fehler nummerieren kann, während für alle anderen GetLastError mehr als genug ist.

Ich vermisse diese Funktion in MT4 sehr, was soll ich tun?

 
vit46:

Mit GetLastError() wird die spezielle Variable last_error gelöscht. Und so werden alle möglichen außer erwartetem if (GetLastError() == 4066) zum Beispiel ausgeblendet.

Ich möchte last_error selbst verwenden, aber es ist unsichtbar.

Die Variable _LastError() wird in MT5 GetLastError() nicht auf Null gesetzt. Dem Himmel sei Dank! ResetLastError() wurde für diesen Zweck erfunden!

Außerdem haben wir die Funktion SetUserError(user_error) hinzugefügt, die Benutzerfehler wie folgt zählt:

_LastError = 65536 + user_error.

Offensichtlich wird eine Variable verwendet, um den letzten Fehler zu speichern, so dass es im Grunde eine unnötige Optimierung ist.

Sie könnten einfach SetLastError hinzufügen und das wäre genug! Idealerweise sollten Sie last_error sichtbar machen.

Ein fortgeschrittener Programmierer würde es selbst verstehen, seine Fehler zu nummerieren, während für alle anderen GetLastError mehr als genug ist.

Ich vermisse diese Funktion in MT4 sehr, was soll ich tun?

Sie können auf GetLastError() verzichten.Alle möglichen Fehler, außer dem erwarteten , werden von den krummen Händen eines "fortgeschrittenen" Programmierers versteckt. Ist es wirklich notwendig, den Fehlerwert in einer Variablen zu speichern und erst dann zu analysieren?
 
VladislavVG:
Sie können auf GetLastError() verzichten.Alle möglichen Fehler, außer dem erwarteten , werden von den krummen Händen eines "fortgeschrittenen" Programmierers versteckt. Ist eine besondere Art der "fortgeschrittenen Programmierung" wirklich notwendig, um den Fehlerwert in einer Variablen zu speichern und erst dann zu analysieren?

Die Fehlerbehandlung ist das eigentliche Wesen der Programmierung. Du unterschätzt etwas... Ich verwende viele Funktionen in einem Programm in verschiedenen Dateien, und ich möchte einen bestimmten Fehler in einer Funktion prüfen, ohne mögliche andere Fehler, die zuvor in anderen Funktionen aufgetreten sein könnten, generell zu annullieren... Ich habe dieses Problem eigentlich schon gelöst... Es war gar nicht so schwer, das elende GetLastError, das alles löscht, was gespeichert werden muss, durch zwei einfache Funktionen ....SetError und GetError zu ersetzen ... aber ich musste sie immer einschalten...
 
vit46:

Die Fehlerbehandlung ist das eigentliche Wesen der Programmierung. Du unterschätzt da etwas... Ich verwende viele Funktionen in einem Programm in verschiedenen Dateien, und ich möchte, dass die Überprüfung eines bestimmten Fehlers in einer Funktion nicht mögliche andere Fehler zunichte macht, die zuvor in anderen Funktionen aufgetreten sein könnten... Ich habe dieses Problem eigentlich schon gelöst... Es war gar nicht so schwer, das elende GetLastError, das alles löscht, was gespeichert werden muss, durch zwei einfache Funktionen ....SetError und GetError zu ersetzen ... aber ich muss sie immer einschalten ...

Was hindert Sie daran, Fehler nach Ort und Zeit ihres Auftretens zu behandeln, anstatt sie zu kumulieren? Übrigens, wenn Sie akkumulieren müssen - machen Sie ein Feld, füllen Sie es - dann analysieren Sie es an der Stelle, die Sie brauchen. In beiden Fällen ist getLastError() ausreichend.

Was das Wesen der Programmierung angeht, gut gemacht, danke ......

 
Nun, wenn du etwas nicht verstehst, ist das dein Problem :) Mir persönlich ist es zu langweilig, für jeden Fall vorzusorgen und GetLastError an jeder Stelle einzufügen, an der ein Fehler auftreten kann. (Und wo sonst könnte es vorkommen?) Ich schreibe Code so weit wie möglich fehlerfrei. Aber es gibt einige spezielle Situationen wie den Fehler 4066, der jederzeit auftreten kann und nicht von mir abhängt. Und für solche Fehler muss ich Behandlungscode schreiben. Aber diese böse GetLastError nullt alle Fehler und sie gehen nicht durch das gesamte Programm. Ich überprüfe Fehler nur einmal am Ende, siehst du das nicht? Warum glauben Sie, dass MT5 es fast so gemacht hat, wie ich es wollte? Wahrscheinlich wegen meiner Anfrage :)
 
...und sie brauchen auch die Ausnahmebehandlung, ohne die sie nicht leben können...
 
Integer:
...und sie brauchen auch die Ausnahmebehandlung, ohne die sie nicht leben können...

und explizite Typisierung:)
 
vit46:
Mir persönlich ist es zu langweilig, für jeden Fall vorzusorgen und GetLastError an jeder Stelle einzufügen, an der ein Fehler auftreten kann.

Warum sollten Sie das wirklich tun?

Der Fehler sollte so behandelt werden, wie er auftritt.

Ich verstehe, dass Sie diese Konstrukte schreiben:

OrderSend(...);

if(GetLastError()>0) { ... }

Es ist nicht richtig.

 

vit46:

Nun, wenn du etwas nicht verstehst, ist das dein Problem :) Mir persönlich ist es zu langweilig, für jeden Fall vorzusorgen und GetLastError an jeder Stelle einzufügen, an der ein Fehler auftreten kann. (Und wo sonst könnte es vorkommen?) Ich schreibe Code so weit wie möglich ohne Fehler. Aber es gibt einige spezielle Situationen wie den Fehler 4066, der jederzeit auftreten kann und nicht von mir abhängt. Und für solche Fehler muss ich Behandlungscode schreiben. Aber diese böse GetLastError nullt alle Fehler und sie gehen nicht durch das gesamte Programm. Ich überprüfe Fehler nur einmal am Ende, siehst du das nicht? Warum glauben Sie, dass MT5 es fast so gemacht hat, wie ich es wollte? Wahrscheinlich wegen meiner Anfrage :)

........
und explizite Typkonvertierung :)
:) Ich erkläre dir, was du nicht verstehst, wenn du die Hinweise nicht verstehst: Die Fortgeschrittenen sind fortgeschritten, weil sie wissen, wie sie die gebotenen Möglichkeiten nutzen können.... Wenn Sie nicht genug von den angebotenen Möglichkeiten haben, schreiben Sie die Pluspunkte auf. Wo liegt das Problem?
 
VladislavVG:
:) Lassen Sie mich erklären, was Sie nicht verstehen, wenn die Hinweise Sie nicht erreichen: Die Fortgeschrittenen sind fortgeschritten, weil sie die gebotenen Möglichkeiten zu nutzen wissen.... Wenn Sie nicht genug von den angebotenen Möglichkeiten haben, schreiben Sie die Pluspunkte auf. Was ist das Problem?

Ich habe bereits geschrieben, dass ich dieses Problem gelöst habe! Es ist ein Nachteil von MQL4 Sprache, es ist einfacher, eine Funktion zu ihm hinzufügen... Ich schlage nicht vor, zu ändern
 
sergeev:

Warum sollten Sie das wirklich tun?

Der Fehler sollte so behandelt werden, wie er auftritt.

Ich verstehe, dass Sie diese Konstrukte schreiben:

OrderSend(...);

if (GetLastError()>0) { ... }

Dies ist falsch.



Nein, ich schreibe so:

OrderSend(...);

if (GetError()==конкретный номер){
         // код обработки сброс ошибки или наоборот
         SetError(0);
         }
else if(...)
...
...
// и в конце программы
if (GetError()) >0){
        // гдето необработанное исключение или ошибка номер...
        // просто сообщение об ошибке
        }