Andiamo SetLastError!!!

 

GetLastError() cancellerà la variabile speciale last_error. E così nasconderà tutto il possibile tranne il previsto if (GetLastError() == 4066) per esempio.

Voglio usare last_error stesso, ma è invisibile.

La variabile _LastError() non è cancellata in MT5 GetLastError(). Grazie al cielo! Per questo, è stato inventato ResetLastError()!

E abbiamo anche aggiunto la funzione SetUserError(user_error) che numera gli errori degli utenti nel modo seguente:

_LastError = 65536 + user_error.

Ovviamente, una variabile è usata per memorizzare l'ultimo errore, quindi è essenzialmente una modifica non necessaria.

Si potrebbe semplicemente aggiungere SetLastError e sarebbe sufficiente! Idealmente basta dare visibilità a last_error.

Un programmatore avanzato capirebbe da solo come numerare i suoi errori, mentre tutto il resto GetLastError è più che sufficiente.

Mi manca davvero questa funzione in MT4, cosa dovrei fare?

 
vit46:

GetLastError() cancellerà la variabile speciale last_error. E così nasconderà tutto il possibile tranne il previsto if (GetLastError() == 4066) per esempio.

Voglio usare last_error stesso, ma è invisibile.

La variabile _LastError() non è cancellata in MT5 GetLastError(). Grazie al cielo! Per questo, è stato inventato ResetLastError()!

E abbiamo anche aggiunto la funzione SetUserError(user_error) che numera gli errori degli utenti nel modo seguente:

_LastError = 65536 + user_error.

Ovviamente, una variabile è usata per memorizzare l'ultimo errore, quindi è essenzialmente una modifica non necessaria.

Si potrebbe semplicemente aggiungere SetLastError e sarebbe sufficiente! Idealmente basta dare visibilità a last_error.

Un programmatore avanzato capirebbe da solo come numerare i suoi errori, mentre tutto il resto GetLastError è più che sufficiente.

Mi manca davvero questa funzione in MT4, cosa dovrei fare?

Si può fare a meno di GetLastError().Tutti i possibili erroritranne quello previsto saranno nascosti dalle mani storte di un programmatore "avanzato". C'è qualche modo speciale di essere "avanzato" davvero necessario per salvare il valore dell'errore in una variabile e solo allora analizzarlo?
 
VladislavVG:
Si può fare a meno di GetLastError().Tutti i possibili erroritranne quello previsto saranno nascosti dalle mani storte di un programmatore "avanzato". C'è qualche modo speciale di "programmazione avanzata" davvero necessario per salvare il valore dell'errore in una variabile e solo allora analizzarlo?

La gestione degli errori è l'essenza stessa della programmazione. Lei sottovaluta qualcosa... Uso molte funzioni in un programma in diversi file e voglio controllare un errore specifico in una funzione senza annullare possibili altri errori che possono essersi verificati prima in altre funzioni in generale... Ho già risolto questo problema in realtà... Non è stato così difficile sostituire il miserabile GetLastError che cancella ciò che deve essere salvato con due semplici funzioni ....SetError e GetError ... ma dovrei sempre attivarle...
 
vit46:

La gestione degli errori è l'essenza stessa della programmazione. Stai sottovalutando qualcosa... Uso molte funzioni in un programma in diversi file e voglio controllare un errore specifico in una funzione per non annullare possibili altri errori che possono essersi verificati prima in altre funzioni... Ho già risolto questo problema in realtà... Non è stato così difficile sostituire il miserabile GetLastError che cancella ciò che deve essere salvato con due semplici funzioni ....SetError e GetError ... ma dovrei sempre attivarle...

Cosa vi impedisce di gestire gli errori in base al luogo e al momento in cui si verificano, invece di accumularli? A proposito, se hai bisogno di accumulare - fai un array, riempilo - poi analizzalo nel posto che ti serve. In entrambi i casi getLastError() sarà sufficiente.

Per quanto riguarda l'essenza della programmazione, ben fatto, grazie ......

 
Beh, se non capisci qualcosa, è un tuo problema :) Personalmente, mi annoio a prevedere ogni caso e a inserire GetLastError in ogni luogo in cui può verificarsi un errore. (E dove altro potrebbe accadere?) Scrivo codice il più possibile senza errori. Ma ci sono alcune situazioni specifiche come l'errore 4066 che può verificarsi quando voglio e non dipende da me. E devo scrivere codice di gestione per tali errori. Ma questo malvagio GetLastError annulla tutti gli errori e non passa attraverso l'intero programma. Controllo gli errori solo una volta alla fine, non vedi? Perché pensate che MT5 abbia fatto quasi come voglio io? Probabilmente a causa della mia richiesta :)
 
...e hanno anche bisogno della gestione delle eccezioni, non possono vivere senza...
 
Integer:
...e hanno anche bisogno della gestione delle eccezioni, non possono vivere senza...

e il casting esplicito dei tipi:)
 
vit46:
Personalmente, mi annoio a prevedere qualsiasi caso e a inserire GetLastError in qualsiasi posto in cui può verificarsi un errore.

Davvero, perché l'hai fatto?

L'errore dovrebbe essere gestito nel momento in cui si verifica.

Ho capito che lei scrive questi costrutti:

OrderSend(...);

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

non è giusto.

 

vit46:

Beh, se non capisci qualcosa, è un tuo problema :) Personalmente, mi annoio a prevedere qualsiasi caso e a inserire GetLastError in qualsiasi posto in cui può verificarsi un errore. (E dove altro potrebbe accadere?) Scrivo codice il più possibile senza errori. Ma ci sono alcune situazioni specifiche come l'errore 4066 che può verificarsi quando voglio e non dipende da me. E devo scrivere codice di gestione per tali errori. Ma questo malvagio GetLastError annulla tutti gli errori e non passa attraverso l'intero programma. Controllo gli errori solo una volta alla fine, non vedi? Perché pensate che MT5 abbia fatto quasi come voglio io? Probabilmente a causa della mia richiesta :)

........
e conversione esplicita dei tipi :)
:) Ti spiego quello che non capisci se i suggerimenti non arrivano: gli avanzati sono avanzati perché sanno come usare le opportunità fornite.... Se non vi bastano le opportunità offerte, scrivete sui plus. Qual è il problema?
 
VladislavVG:
:) Lasciate che vi spieghi quello che non capite, se i suggerimenti non vi arrivano: gli avanzati sono avanzati perché sanno usare le opportunità fornite.... Se non avete abbastanza delle opportunità offerte, scrivete sui plus. Qual è il problema?

Ho già scritto che ho risolto questo problema! È uno svantaggio del linguaggio MQL4, è più facile aggiungervi una funzione... Non sto suggerendo di cambiare
 
sergeev:

Davvero, perché l'hai fatto?

L'errore dovrebbe essere gestito nel momento in cui si verifica.

Ho capito che lei scrive questi costrutti:

OrderSend(...);

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

questo non è corretto.



No, io scrivo così:

OrderSend(...);

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