Gli operatori logici in Visual Basic Net? Li trovi su Opentraining.it Visual Basic Italia
Guide e Tutorials:indexed
Le API: limiti delle funzioni callback


Nell'ultimo articolo si è potuto capire l'importanza e l'utilità dell'operatore AddressOf per richiamare una funzione callback che elabori uno per uno i risultati ritornati da una funzione API.
In realtà però esistono alcune limitazioni. Come si è visto il puntatore ad una funzione callback (ossia l'operatore AddressOf) è valido come argomento di una funzione API. Può però capitare di dover assegnare ad una variabile del tipo definito dalla struttura l'indirizzo di una funzione callback, come nell'esempio riportato sotto:

Private Type EMRPOLYPOLYGON
pEmr As emr
rclBounds As RECTL
nPolys As Long
cptl As Long
aPolyCounts(1) As Long
aptl(1) As POINTL
End Type
Private Function Funzione_CallBack() As Long
If Int(10 * Rnd + 1) >= 1 Then
nPolys = 10
Else
nPolys = 0
Funzione_CallBack = nPolys
End If
End Function
Private Sub Form_Load()
Dim Poligono As EMRPOLYPOLYGON
'istruzione invalida:
Poligono.nPolys= AddressOf Funzione_Callback
End Sub

Avviando l'applicazione (dopo aver naturalmente inserito le dichiarazioni di tutte le altre strutture), comparirà un messaggio di errore.
La ragione di questo limite è che il puntatore ad una funzione callback dev'essere obbligatoriamente all'interno di una funzione. Non necessariamente un'API però.
Il modo quindi per superare l'ostacolo consiste nell'includere nel codice una seconda funzione nella quale si potrà senza problemi indicare l'indirizzo della prima funzione. Ad esempio:

Private Sub Form_Load()
Dim Poligono As EMRPOLYPOLYGON
Poligono.nPolys = Prima_Funzione(AddressOf Funzione_CallBack)
End Sub

In questo modo l'operatore verrà riconosciuto in quanto incluso come parametro di una vera e propria funzione.

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