Newsgroup: it.comp.lang.visual-basic
Titolo: Propagazione errori in gerarchia di classi

In una mia applicazione ho sviluppato una gerarchia di classi, che si
includono in cascata (ovviamente, evitando riferimenti circolari 8-) ).
Ho notato, pero', che se in una classe a livello basso c'e' un errore, e
di proposito non lo trappo, questo mi blocca la dll, e non viene
trappato dalla classe a piu' alto livello.
Esempio:
Classe1
  Procedura1 che va in errore
Classe2
  Private cIstanza as Classe1
  Class_Initialize
    Set cIstanza = new Classe1
  Procedura2
    on error goto TrapError
    ...
    cIstanza.Procedura1
    exit sub
    TrapError:
    <Mia gestione dell'errore>
    end sub
L'errore in cIstanza.Procedura1, non trappato in Classe1, non viene
trappato neanche in Classe2, provocando un messaggio di errore. Se
invece simulo una gerarchia simile usando delle sub, il tutto funziona
correttamente.
Non c'e' un sistema immediato (che non sia il trapparmi tutti gli errori
ad ogni livello della gerarhia di classi) per propagare un errore?
Grazie a tutti!
Bye by SixaM 8-]
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Bye by SixaM 8-]
Non sono sicuro di aver capito correttamente, ma una classe
supporta la generazione di Eventi
Public Event Class_Error(ErrNum As Integer, ErrDesc As String)
Ovvio che la gestione errori interna dovrà rifarsi con 
RaiseEvent  Class_Error(Numero,Descrizione)
Di conseguenza la tua istanza di classe se viene definita
con :
Private WithEvents mClass  As clsName
puoi ereditare la gestione degli errori in quanto Evento di Classe.
Saluti
@Alex


 Bye by SixaM 8-]
Mi ha mangiato una risposta e non sò perchè....
In ogni caso non sò se posso aver frainteso la tua esigenza, valuta
se quanto ti dico è utile.
Nella classe puoi dichiarare come Evento di Classe un evento Public
Public Event Class_Error(ErrNum As Integer, ErrDesc As String)
da richiamare ovviamente tramite una gestione errori con
   RaiseEvent Class_Error(Numbero, Descrizione)
Ora se l'istanza di Classe viene fatta con 
Private WithEvents mClass  As tuaclsName
riesci ad ereditare gli eventi di classe definiti come Public.
Saluti
@Alex


 @Alex
Non e' male come soluzione, ma e' sempre una soluzione 'a manina', che
mi obbliga a inserire la gestione degli errori in ogni metodo pubblico
delle mie classi... io speravo che la propagazione dell'errore
attraverso le classi fosse automatica.
Bye by SixaM 8-]


 attraverso le classi fosse automatica.
C'è un'apposita opzione di VB che regola questo funzionamento quando esegui
nell'IDE (Options/General/Error trapping): per default è su "Break in class
module", pertanto qualunque errore runtime, anche se gestito ad un livello
superiore, provoca l'interruzione del programma.
Settala su "Break on unhandled errors".
Naturalmente nell'EXE compilato questa impostazione non ha effetto in quanto
tutti gli errori vengono propagati correttamente al gestore "superiore" e quindi
il tuo problema non si pone.
Bye
Raf

 Raf
Ci hai ragione... in effetti i test che avevo fatto erano tutti in
ambiente di sviluppo. Mi era venuta l'idea che la mancata propagazione
čpoteva dipendere da una configurazione dell'IDE, ma l'avevo abbandonata
subito.
Cmq Grazie 1000!!!
