Connessione al database con Visual Basic NET? Lo trovi su Opentraining.it Visual Basic Italia
Guide e Tutorials:indexed
La funzione SetLastError: Tutorial completo
Nel corso di un articolo precedente è stato visto come delegare al sistema operativo l'onere di recuperare le informazioni di un errore causato da una chiamata API non valida.
Attraverso il codice dell'errore, la cui lista è anch'essa disponibile nell'indice analitico, è dunque stato possibile fornire all'utente una descrizione del problema causato dalla funzione.
Tale descrizione è però universale, ossia la stessa per ogni utente di Windows. Ad esempio un codice di errore del tipo ERROR_PATH_NOT_FOUND, indica l'assenza di un percorso specificato.
Inoltre la descrizione è chiaramente in inglese e male si adatta ad applicazioni distribuite in altre lingue.
Fortunatamente si può però fare riferimento alla funzione SetLastError attraverso la quale è possibile creare la propria definizione dell'errore, partendo proprio dal codice dell'errore. La SetLastError infatti rielabora tale codice fornendo una definizione personalizzata che naturalmente dovremo fornire in fase di progettazione.
Prima di continuare conviene dare uno sguardo alla dichiarazione:

Declare Sub SetLastError Lib "kernel32.dll" (ByVal dwErrCode As Long)

Come si sarà notato la funzione non ritorna alcun valore. La ragione di ciò verrà vista poco più avanti. Per quanto riguarda le ulteriori caratteristichie della SetLastError possiamo notare che è contenuta in kernel32.dll e necessita di un solo parametro che anticipando ciò che sarà detto successivamente, corrisponde proprio al codice dell'errore generato da una qualsiasi altra API.
E' necessario aggiungere soltanto che per ottenere il codice dell'errore sarà necessario fare riferimento all'oggetto Err il quale supporta il metodo LastDllError, che appunto fornisce il codice dell'errore causato dall'ultima chiamata API non valida.
Come già anticipato l'unico parametro richiesto è il seguente:

dwErrCode rappresenta il codice dell'errore dell'API non valida. Se si definisce una definizione personalizzata dell'errore bisogna essere certi che il bit 29 (&H20000000) sia attivo. Questo indica infatti al sistema una definizione dell'errore generata dall'applicazione: nessun codice di errore infatti utilizza questo bit.

Prima di concludere mostriamo di seguito un esempio piuttosto semplice.
Dobbiamo simulare un errore di un'API qualsiasi, far elaborare il codice dell'errore dall'oggetto Err e quindi indirizzare l'applicazione verso la nostra definizione personalizzata di tale errore.
Prima di tutto però dichiariamo la SetLastError:

Private Declare Sub SetLastError Lib "kernel32.dll" (ByVal dwErrCode As Long)

In secondo luogo dichiariamo la seconda funzione utile, ossia quella che genererà l'errore. Omettiamo in questo esempio la dichiarazione di tale funzione, lasciando ad ognuno la libertà di utilizzare l'API preferita. In questo esempio infatti, come si vedrà meglio in seguito, non è fondamentale l'uso della seconda funzione in quanto simuleremo un errore tramite un valore di ritorno pari a 0, che come si è visto in precedenti articoli, indica che l'API non ha funzionato in modo corretto. Naturalmente al di fuori di questo contesto, sarà del tutto inutile un operazione del genere: sarà dunque obbligatorio dichiarare l'API per poterne gestire gli errori.

**Dichiarazione API a scelta**

Adesso simuliamo un valore di ritorno della funzione che implichi un errore e richiamiamo la SetLastError passandole il parametro richiesto ossia il codice dell'errore che vogliamo personalizzare:

ValoreDiRitorno = 0
SetLastError ERROR_FILE_NOT_FOUND

E per finire gestiamo l'errore con l'oggetto Err:

Select Case Err.LastDllError

Nel caso in cui il codice dell'errore che intendiamo personalizzare sia ERROR_FILE_NOT_FOUND, visualizziamo una finestra di messaggio ad esempio col testo "Impossibile trovare il file specificato":

Case ERROR_FILE_NOT_FOUND
MsgBox "Impossibile trovare il file specificato"

In tutti gli altri casi, ossia con un codice di errore differente da quello specificato, possiamo visualizzare una finestra di messaggio con un messaggio di errore generico:

Case Else
MsgBox "L'operazione eseguita ha incontrato un errore " _
& "non meglio specificato"
End Select

Nel caso invece in cui il valore di ritorno sia diverso da 0 (caso impossibile in questo esempio in quanto ValoreDiRitorno è stato espressamente impostato su 0. Per utilizzare questo esempio in una modalità normale, ossia senza dover simulare un errore basterà rimuovere la linea 'ValoreDiRitorno = 0'), visualizziamo una finestra di messaggio che indichi il successo della funzione:

Else
MsgBox "La funzione ha avuto il successo sperato"
End If




Archivio:ndexed
Lezioni Commenta questa lezione Invia la tua guida Avviso per le nuove lezioni
Proponi un argomento

Visual Basic Italia© copyright 2000 - tutti i diritti riservati
E-mail:
vbitalia@libero.it