Guide e Tutorials:indexed | |||
Le API: funzioni callback Comprendere il concetto di Funzione Callback è molto semplice per chi ha seguito gli articoli precedenti sulle API. Una Funzione Callback infatti processano delle informazioni nello stesso istante in cui la funzione API viene richiamata, in modo quindi da evitare di attendere il termine dell'elaborazione e da un altro lato di inserire la chiamata API all'interno di un ciclo. Per fare un esempio pratico si può pensare al processo di enumerazione di tutte le finestre aperte attraverso la funzione EnumWindows. Una volta chiamata l'API EnumWindows essa ritornerà il riferimento alla prima finestra trovata, cosa che in sè non ha molto significato. Ecco perchè la funzione passa immediatamente tale riferimento alla funzione callback che la elabora in tempo reale, ancor prima di ricevere il riferimento alla seconda finestra. Elaborazione che naturalmente consiste in una serie di operazioni a discrezione dello sviluppatore, proprio come in una funzione normale. E fa parte delle possibilità della funzione callback l'interruzione del processo ossia la segnalazione di stop alla funzione API. L'utilizzo delle funzioni callback si rivela molto semplice con l'utilizzo dell'istruzione AddressOf che contiene l'indirizzo della funzione callback. Cosa molto importante da ricordare è che la funzione callback dev'essere pubblica (Public Function) e contenuta in un modulo e non all'interno di un modulo di form. Questo per permettere la piena accessibilità delle funzioni API in qualsiasi parte del codice siano state inserite. Le limitazioni all'utilizzo dell'operatore AddressOf sono molto chiare nella documentazione di sviluppo di Visual Studio: La sintassi dell'operatore AddressOf è la seguente:
|
EnumWindows AddressOf Funzione_Callback, 0 |
'// MODULO STANDARD Public Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal _ hwnd As Long) As Long Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, _ ByVal lpString As String, ByVal cch As Long) As Long '// la funzione callback Public Function TestoFinestre(ByVal hwnd As Long, ByVal lParam As Long) As Long Dim LTesto As Long, TBuffer As String '// lungh. del testo e della memoria che lo contiene LTesto = GetWindowTextLength(hwnd) + 1 '// richiama l'API per ottenere la lunghezza TBuffer = Space(LTesto) '// crea uno spazio in memoria pari alla lunghezza del testo GetWindowText hwnd, TBuffer, LTesto '// richiama l'API per ottenere il testo MsgBox Left(TBuffer, LTesto - 1) '// mostra il testo della barra del titolo End Function |
'// MODULO DI CODICE Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, _ ByVal lParam As Long) As Long Private Sub Form_Load() EnumWindows AddressOf TestoFinestre, 0 End Sub |
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 |