Errori, bug, domande - pagina 1499

 
Alexey Kozitsyn:
La strada per l'inferno della programmazione è lastricata divariabiliglobali" (Steve McConnell)
Viene mostrato solo un esempio dell'assenza di questo avvertimento. Creare una variabile come variabile globale o locale è una questione di gusto ed esperienza del programmatore.
 
Ilyas:
Verrà aggiunto un avvertimento sul non utilizzo reale delle variabili locali e globali (tipo semplice o "complesso" senza costruttori), ma la priorità di questo compito è bassa.
Capito, grazie. Per sicurezza, cercherò di attirare l'attenzione degli sviluppatori qui.
 
Alexey Kozitsyn:
Un'attivazione per PC. Non importa quanti terminali ci sono.
C'è qualche conferma da qualche parte?
 
Vladimir Pastushak:
C'è qualche conferma da qualche parte?

L'Acquirente acquisisce il diritto di attivare il Prodotto per il numero di volte specificato dal Venditore al momento dell'acquisto o del leasing del Prodotto. Per esempio, se sono permesse 20 attivazioni per il Prodotto al momento dell'acquisto, l'Acquirente sarà in grado di installarlo su 20 diverse configurazioni hardware, anche se il Venditore riduce successivamente questo numero.

https://www.mql5.com/ru/market/rules

Правила покупки торговых роботов, индикаторов, книг и журналов в MetaTrader Market
Правила покупки торговых роботов, индикаторов, книг и журналов в MetaTrader Market
  • www.mql5.com
Общие положения и правила пользования сервисом Market
 
Questo post riduce automaticamente la risoluzione dell'immagine fino a 6 volte la dimensione (byte) dell'originale. Perché?
 
Alexey Kozitsyn:
Slawa, buon pomeriggio, puoi commentare la biblioteca (domanda sopra)?

Questo è il modo per risolvere il problema.

long CChart::Open(const string symbol_name,const ENUM_TIMEFRAMES timeframe)
  {
   m_chart_id=ChartOpen(symbol_name,timeframe);
   if(m_chart_id==0)
      m_chart_id=-1;
   return(m_chart_id);
  }
 
Slawa:

Questo è il modo per risolvere il problema

Sì, grazie, è ottimale. Per la biblioteca. E l'errore 4024?
 
Slawa:

Questo è il modo per risolvere il problema.

Qual è lo scopo di fare questo? La libreria standard deve essere usata non come piace all'utente, ma in stretta conformità con l'ideologia della sua struttura.Alexey Kozitsyn lo usa in modo scorretto ed è per questo che ha un sacco di bug nell'output. Hai solo bisogno di attaccare il grafico all'oggetto della classe usando il metodo Attach dopo aver creato l'oggetto CCart. Questo metodo è sovraccaricato e può allegare sia il grafico corrente che quello necessario. La tua modifica al metodo Open ucciderà la capacità di lavorare con il grafico corrente.

E la richiesta agli sviluppatori della libreria standard - si prega di fare una descrizione della struttura della libreria. Molti non lo capiscono e cominciano a fare errori, e voi li seguite, cominciate a rompere tutto quello che è stato fatto.

 
Alexey Kozitsyn:

Domanda sulla libreria standard di MT4.

File Chart.mqh

Voglio aprire il grafico. Uso il metodo Open(const string symbol_name,const ENUM_TIMEFRAMES timeframe).

1. Se usate un simbolo non disponibile, la funzione ChartOpen() restituirà l'errore #4024 - errore interno. Senza dubbio, l'errore può essere interno, ma c'è un codice di errore molto più preciso - #4106 - un simbolo sconosciuto. Forse dovremmo cambiare il codice di errore restituito? Poiché il 4024 non dice nulla allo sviluppatore su dove cercare l'errore.

2. In caso di fallimento, ChartOpen() assegna il valore 0 al campo m_chart_id, cioè risulta che iniziamo a lavorare con il grafico corrente, ma questo non è corretto, perché non siamo riusciti ad aprire il grafico desiderato per lavorare. Di conseguenza, se non chiamiamo il metodo Detach(), il grafico corrente si chiuderà semplicemente dopo il lavoro. Penso anche che questo non sia l'approccio giusto. La funzione ChartOpen() farebbe meglio a restituire -1 in caso di errore.

Prima di lavorare con un grafico, deve essere attaccato a un oggetto di classe utilizzando il metodo Attach!!! Se non volete lavorare con il grafico corrente ( 0 ) allora implementate questo controllo e vietate l'uso del grafico corrente nel vostro lavoro.

E cosa significa lavorare con il grafico e non chiuderlo usando il metodo Detach per uscire? È davvero difficile scrivere una riga nel distruttore delle vostre classi o in OnDeinit? Il lavoro con gli oggetti deve essere strettamente controllato, allora si possono evitare errori.

 
coderex:

Qual è lo scopo di fare questo? La libreria standard dovrebbe essere usata non come vuole l'utente, ma in stretta conformità con l'ideologia della sua struttura.Alexey Kozitsyn non lo usa correttamente ed è per questo che ha un sacco di bug nell'output. Hai solo bisogno di attaccare il grafico all'oggetto della classe usando il metodo Attach dopo aver creato l'oggetto CCart. Questo metodo è sovraccaricato e può allegare sia il grafico corrente che quello necessario. La tua modifica al metodo Open ucciderà la capacità di lavorare con il grafico corrente.

E la richiesta agli sviluppatori della libreria standard - si prega di fare una descrizione della struttura della libreria. Molte persone non lo capiscono e cominciano a fare errori, e voi seguite il loro esempio e cominciate a rompere tutto quello che avete fatto.

Ho scritto chiaramente sopra qual è lo scopo di farlo. Se c'è un errore all'apertura del grafico (per esempio, se si imposta un simbolo non valido), allora, per qualche motivo, per analogia con il metodo Attach(void), il metodo Open() legherà l'identificatore del grafico corrente all'oggetto. Perché dovrebbe farlo? Se voglio lavorare con il grafico corrente, chiamerò il metodo Attach(void) { m_chart_id=ChartID(); } ed è tutto. Ma qui ho una situazione palesemente errata in cui per qualche motivo inizio a lavorare con la cosa sbagliata. In generale, è un problema con la funzione ChartOpen() stessa, ma visto che non la cambieranno, almeno lasciamogliela cambiare nella libreria.

Un altro argomento. Per favore, pensate in modo logico. Il metodo si chiama Open(). Implica che qualcosa di nuovo sarà aperto! E inizieremo a lavorare con questo nuovo elemento. Ma qui stiamo lavorando con quello vecchio. Non vedo alcuna logica. E sembra che lei usi questa imprecisione per i suoi scopi.

Questo metodo è sovraccaricato e può legare sia il grafico corrente che quello necessario. E il tuo cambiamento al metodo Open ucciderà la capacità di lavorare con il grafico corrente.

Cosa ucciderà? Avrete ancora il metodo Attach(), che continuerà a fare quello che stava facendo. Come hai detto, controlla l'ID di ritorno della funzione Open() e se è inferiore a 0, chiama il metodo Attach(void). Questo è tutto. Non capisco proprio perché si debba fare un tale casino, se si può semplicemente chiamare il metodo Attach(void) e allegare il grafico corrente.

Forse non ti capisco. Allora mi faccia un esempio.

Chiedete anche agli sviluppatori della libreria standard di fare una descrizione della struttura della libreria. Molte persone non lo capiscono e iniziano a fare errori, e tu li segui e inizi a rompere tutto quello che hai fatto.

Che dichiarazione forte... Non pensate di essere più intelligenti degli altri, potrebbe non essere così.
Motivazione: