Connessione al database con Visual Basic NET? Lo trovi su Opentraining.it Visual Basic Italia
Guide e Tutorials:indexed
La funzione GetLastError
Spesso risulta difficoltoso lavorare con le API, specialmente perchè alcune di esse causano errori irreparabili (dal punto di vista della sessione di lavoro dell'applicazione in sviluppo).
Come già accennato nell'articolo relativo ai problemi causati dalle API "[...] sono maggiormente soggette ad errori rispetto alle funzioni strettamente interne al codice. Questo perchè essendo state create in C++, le informazioni passate alle (e dalle) funzioni devono necessariamente essere in linea con la sintassi usata da questo linguaggio, a prescindere da quello che effettivamente si sta utilizzando. Tutto ciò può portare a notevoli problemi piuttosto difficili da scovare, relativamente ad esempio ai puntatori e ad altri concetti dalla conoscenza dei quali il programmatore è generalmente sollevato. Per di più un errore nelle API è molto più pesante di un errore generato da una istruzione del codice. In questo caso infatti verrà generata la classica finestra di messaggio che ci intima di cambiare qualcosa nel codice perchè così non va bene. Questo perchè l'errore è interno a Visual Basic e può essere da esso facilmente individuato e gestito. Nel primo caso invece Visual Basic dovrebbe monitorare tutte le attività del nostro computer (cosa impossibile o almeno non realistica) per poter fornire una spiegazione all'errore API. Ed ecco allora che il programma si blocca irrimediabilmente in quanto le stesse API lo costringono a chiudersi tramite un GPF (General Production Fault). [...]". Individuare un errore causato da un'API è possibile attraverso l'utilizzo della GetLastError che ottiene il codice dell'errore ritornato dalla chiamata della funzione in questione. Nell'indice analitico degli articoli troverete la lunga lista completa dei codici di errore delle API.
Molte API ritornano un numero che indica se la funzione ha avuto successo o no (e in articoli precedenti ci è spesso capitata una cosa del genere. Generalmente 1 è il codice che indica un successo della funzione e 0 è quello che indica fallimento). Questo permette appunto di sapere se la funzione ha generato o meno un errore ma non quale specifico tipo di errore ha causato.
La dichiarazione della GetLastError è la seguente:

Declare Function GetLastError Lib "kernel32.dll" () As Long

piuttosto semplice da comprendere, come si può vedere, in quanto non necessita di alcun parametro. Essa andrà a ricercare automaticamente il messaggio di errore generato nel sistema operativo.
Il valore di ritorno è, come già più volte detto, il codice dell'errore.
Sebbene questa funzione lavori perfettamente all'interno di un progetto sviluppato in Visual Basic, si può talvolta pensare che non abbia alcun effetto visibile. Questo è causato dal fatto che Visual Basic utilizza frequentemente ed in modo automatico le API per compiere delle operazioni che gli competono.
Queste funzioni 'invisibili' (perchè non direttamente richiamate dall'utente) possono arrivare a falsare il codice dell'errore che si tenta di leggere attraverso la GetLastError. Per evitare tale problema, la proprietà LastDllError dell'oggetto Err, predefinito in Visual Basic, si prende l'onere di archiviare il codice dell'errore prima che venga modificato da una funzione non richiamata dal programma. Questa è una ragione per cui spesso si preferisce utilizzare l'espressione

Err.LastDllError

invece dell'API GetLastError.
Prima di concludere l'articolo si può pensare di svolgere un breve esperimento per comprendere il funzionamento della funzione in questione. Si potrebbe ad esempio generare un errore volontariamente attraverso la chiamata di una funzione non valida. Basterà a tale scopo prendere una qualsiasi funzione il cui valore di ritorno sia 0 in caso di fallimento ed 1 in caso di successo e fare in modo che il risultato sia proprio 0.
Ad esempio si può indicare un parametro errato (ma non nella forma, in quanto se la funzione richiede un intero il parametro deve necessariamente essere un intero...!). Nel caso in cui l'API GetLastError non dovesse produrre alcun risultato, provare ad utilizzare l'espressione Err.LastDllError.

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