Newsgroup: it.comp.lang.visual-basic
Titolo: Q U E S T A E ' D A V V E R O D I F F I C I L E ! ! !

Ciao a tutti,
E' possibile (e se si come) sapere da codice VB qual'e' la funzione o la
procedura che ha fatto la chiamata?
Mi spego meglio...
Ho la seguente procedura:
Private Sub Contascatti()
    On Error Goto GestioneErrori
    Istruzione 1 ...
    Istruzione 2 ...
    Istruzione 3 ...
    Exit Sub
GestioneErrori:
    FormVisualizzaErrore.Messaggio (Err.Number)
    Err.Clear
End Sub
Se si verifica un errore nella procedura Contascatti mi piacerebbe
visualizzare una Form (ad esempio FormVisualizzaErrore) che automaticamente
mi visualizza anche il nome della procedura dove si è verificato l'errore...
cosi eviterei di inserirlo come parametro della funzione chiamata (anche
perchè dovrei cambiare nome ad ogni chiamata, con possibili
dimenticanze...).
In sostanza la funzione chiamata avrebbe una forma di questo tipo:
Public Function(ByVal CodiceErrore as Long) as Long
    Istruzione 1...
    Istruzione 2...
    Select Case CodiceErrore
        Case x
            Istruzione x1...
        Case y
            Istruzione y1...
        Case z
            Istruzione z1...
        Case Else
            Istruzione w1...
    End Select
    MsgBox "Si è verificato un errore nella procedura: " &
ProceduraConErrore()
    Istruzione n...
    Istruzione n+1...
End Function
A me interessa sapere proprio se è possibile implementare cio' che dovrebbe
fare la funzione "ProceduraConErrore()" ovvero restituire il nome della
procedura che l'ha chiamata ===> "Contascatti"...
Chi risolve questa è davvero UN MITO!.
CIAO ;-)
Mario
P.S.: Caro Bill (M$) se leggi questa vedi di implementare sta' funzione in
VB 7.0 !!!

>
... se è solo per un discorso di Debug  ....
... potresti dimensionare una variabile es. ErrorFucker$ dopo aver definito l'
"On Error Goto" cambi il valore di ErrorFucker$ prima di ogni istruzione che tu
pensi possa causarti l'errore, dopo di chè non devi far altro che stamparla.
Es
Sub Pippo()
    Dim A$
    On error goto Cannibale
    A$="Istruzione 1"
    Istruzione 1
    A$="Istruzione 2"
    Istruzione 2
    ...
    ...
    ...
    A$="Istruzione n"
    Istruzione n
    On error goto 0
    ExitSub
Cannibale:
    Msgbox A$
    Resume Next
End sub
Il metodo è un pò grossolano ma pur sempre efficace, nonchè immediato!
Ciao Ettore.


Temo che in VB non si possa fare.
In C mi pare di ricordare che esistono delle #define per il preprocessore,
che danno informazioni sul sorgente stesso, dove sono poste (# di linea,
etc...), ma in VB non esistono sistemi simili...
--
Roal Zanazzi
z...@iol.it

...

Nemmeno in C!
Col C sai il Nr di linea corrente ma non la funzione chiamante.
-- 
Ciao
By -MES-   Maronese Ettore
http:\\
ilmes.freeweb.org
(con OCX per stampare i recordset)
Sito Comune di programmatori Visual Basic
http://members.xoom.com/it_lang_vb


Mmmmhhh non vorrei dire una cavolata, ma mi pare che alcuni compilatori C
(forse il GNU, DJGPP, oppure un altro che ho usato) hanno anche altre
variabili di preprocessore... mi pare di ricordare che qualche C ha anche
quella per la routine corrente. Naturalmente dipende dal compilatore (dal
preprocessore, piu' che altro).
Comunque in VB non c'e' di sicuro questa possibilita'.
--
Roal Zanazzi
z...@iol.it

Ciao a tutti,
