Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: g.grandi - 14 Dicembre 2012, 18:53:31

Titolo: I moduli vanno inizializzati prima di utilizzare la classe error nello stesso?
Inserito da: g.grandi - 14 Dicembre 2012, 18:53:31

Ciao a tutti.
Mi sono imbattuto in un problema al quale ho già trovato rimedio, ma giro la domanda a chi ne sa molto più di me. Ho un programma con alcune form in cui vorrei registrare eventuali errori di programmazione. Per non mettere una sub specifica in ogni form, ho pensato di usare un modulo con tale codice da richiamare alla bisogna. Il tutto funziona correttamente salvo il fatto che al primo errore che genero, non viene visualizzata nessuna informazione dalla classe error, mentre per i successivi, si. Per aggirare il problema, ho creato una sub nel modulo, che non fa nulla, e che vado a richiamare dalla Form_Open del form di avvio. Vi è una spiegazione a ciò?  ???
Ho allegato per completezza un esempio che riproduce il problema: entrambi i pulsanti della form generano un errore di divisione per zero che viene mostrato in console dalla sub del modulo. Se eseguo il programma con commentata la sub Form_Open, si presenta il problema; se rendo attiva tale sub, funziona correttamente.

Grazie
Giovanni

Titolo: Re: I moduli vanno inizializzati prima di utilizzare la classe error nello stesso?
Inserito da: vuott - 14 Dicembre 2012, 20:03:06
Ciao,
ho scaricato il tuo applicativo esemplificativo, e - dopo l'automatica conversione per Gambas 3 - l'ho provato sia lasciando la routine commentata che attivandola.
Ti segnalo che in entrambi i casi non ho avuto alcun problema.  :-\

  :ciao:
Titolo: Re: I moduli vanno inizializzati prima di utilizzare la classe error nello stesso?
Inserito da: g.grandi - 15 Dicembre 2012, 09:06:36
Quindi, interpretando la tua risposta, capisco che quanto ho fatto è corretto ma non si spiega perchè dia quel problema sulla versione che uso io.

Grazie
Giovanni
Titolo: Re: I moduli vanno inizializzati prima di utilizzare la classe error nello stesso?
Inserito da: vuott - 15 Dicembre 2012, 11:31:33
...quanto ho fatto è corretto ma non si spiega perchè dia quel problema sulla versione che uso io.

Sembrerebbe, appunto, proprio così !  :-\
Titolo: Re: I moduli vanno inizializzati prima di utilizzare la classe error nello stesso?
Inserito da: Top Fuel - 15 Dicembre 2012, 17:35:19
L'ho provato anche io e deve essere un bug o similare di Gambas 2, perchè con G2 devi usare la sub fittizia perchè il programma funzioni, mentre in G3 non è necessaria.
Titolo: Re: I moduli vanno inizializzati prima di utilizzare la classe error nello stesso?
Inserito da: md9327 - 17 Dicembre 2012, 10:32:40
Attenzione!

La cattura degli errori avviene tramite la classe statica Error, che contiene lo stato dell'ultima esecuzione del programma.
Se si mette una sub, o si richiama un metodo e/o funzione sulla catch dell'evento, si perdono le informazioni, perchè viene eseguito un'altro pezzo di programma.
L'unico modo per salvaguardare le informazioni di errore, è quella di salvarle immediatamente in variabili statiche e/o una classe statica, e pubblica.
In questo caso, chiamando la funzione statica, se non vengono effettuate operazioni al di fuori della sola cattura dei dati, la cosa funziona, altrimenti si ha lo stesso comportamento che hai rilevato.
Purtroppo, in gambas non vi è ancora modo di gestire la logica degli errori, e quindi tocca metterci una pezza così.
Un'altra cosa statica e noiosa, è quella dell'utilizzo dell'istruzione CATCH alla fine del metodo, che deve stare solo lì...
Titolo: Re: I moduli vanno inizializzati prima di utilizzare la classe error nello stesso?
Inserito da: g.grandi - 17 Dicembre 2012, 16:58:22

Chiedo aiuto su una cosa che non ho ancora digerito in Gambas.  :-[
Mi specificate spesso che una funzione (o una varibile) è STATIC per sottolineare che è molto particolare, ma da quel poco che ho trovato per documentarmi, non sono ancora riuscito a capire cosa comporta tale definizione. Io vengo dal QBasic e PWBasic dove tale definizione si usa all'interno di una sub per conservare il valore di una variabile anche al termine dell'esecuzione (END SUB) in modo che al successivo richiamo della stessa sub, potesse essere riutilizzata e non ridefinita. In Gambas tale tipo di comportamento non esiste e bisogna (almeno così ho fatto io) ricorrere ad una variabile di tipo PUBLIC all'interno della classe o modulo che contiene la sub in oggetto. Ma la definizione STATIC ??? ???

Giovanni
Titolo: Re: I moduli vanno inizializzati prima di utilizzare la classe error nello stesso?
Inserito da: vuott - 17 Dicembre 2012, 17:25:46
Ma la definizione STATIC ?

Ti rinvio alla nostra WIKI, dove c'è una breve definizione:
http://www.gambas-it.org/wiki/index.php/Le_Variabili#Dichiarazione_di_variabili