La creazione di un progetto da zero in Visual Basic NET? Lo trovi su Opentraining.it Visual Basic Italia
Guide e Tutorials:indexed
Le API: dichiarazion (seconda parte)

La lezione precedente è stata analizzata la struttura di una dichiarazione API. Abbiamo allora visto che essa si compone di cinque elementi fondamentali, di cui uno solo opzionale. Tali elementi sono: lista argomenti, nome funzione, nome del file .DLL, alias della funzione (che è appunto l'elemento opzionale) e tipologie dati.
Questa volta cercheremo di analizzare l'argomento più articolato tra quelli già introdotti per cercare di comprendere meglio cosa stia alla base della completezza di una dichiarazione API.
L'elemento che compone la dichiarazione sicuramente da valutare più nel dettaglio è la lista argomenti. Essa indica quante variabili e di quale tipo sono passate alla funzione, premettendo che esse sono le variabili necessarie alla funzione per poter adempiere in modo completo ai propri compiti. Il formato della lista argomenti è in tutto e per tutto simile alla dichiarazione di una variabile in una sottoprocedura. Eccolo qui:

[{ ByVal | ByRef }] nome_argomento As tipo_dato

Naturalmente è da tenere a mente che alcune funzioni incorporano una lista argomenti vuota, stando a significare che nessun dato verrà passato a tale funzione. Nel caso si voglia avere un riscontro immediato di quanto detto finora, si può fare riferimento agli esempi situati in fondo alla lezione.
Vediamo ora che cosa significano le diciture nome_argomento e tipo_dato premettendo che ByVal e ByRef verranno trattati a parte nel corso di questa stessa lezione.

nome_argomento E' il nome assegnato all'argomento. Il nome serve unicamente ad individuare ciò che l'argomento rappresenta. Può però essere scelto in modo arbitrario.
tipo_dato E' il tipo di dato di ciascun argomento. Tipo di dato che può essere anche la parola "Any", indicando così che le informazioni verranno passate alla funzione sottoforma di qualsiasi tipo.


Quali sono i tipi di dati che si possono utilizzare nelle dichiarazioni delle API? Innanzitutto vediamo a cosa serve specificare il tipo di dato di un argomento. Come già visto infatti ciascun tipo di dato descrive il formato e la dimensione di una variabile o di un argomento di una funzione. Le API supportano però un numero limitato di tipi di dati, almeno rispetto a quello supportato da Visual Basic. La lista che segue elenca i tipi di dati disponibili per le dichiarazioni API:

Byte un numero intero ad 8 bit
Integer un numero intero a 16 bit
Byte un numero intero a 32 bit
String una stringa della lunghezza che si adatta in modo automatico alla variabile

In aggiunta agli appena menzionati tipi di dati possono essere utilizzate anche tutte le strutture API, di cui però si parlerà in una lezione più avanti. Siccome Windows è un sistema operativo a 32 bit (a partire da Windows 95 per arrivare a Windows NT), praticamente tutti i numeri utilizzati dalle API sono Longsa 32 bit. Per quanto riguarda le stringhe di testo, String è il formato utilizzato in quanto unico mezzo per immagazzinare questi tipi di dati.
Abbiamo anticipato poco sopra l'argomento che trattiamo adesso: ByVal e ByRef. Essi specificano il metodo utilizzato per passare un parametro ad una funzione API. ByRef e ByVal sono profondamente differenti e non sostituibili: non è possibile utilizzarne uno al posto dell'altro. Quando si dichiara un'API si presume che venga utilizzato il metodo ByRef a meno che non venga specificato in modo esplicito che si vuole fare uso dell'altro metodo: ByVal. Adesso vediamo a cosa si riferiscono i due metodi:
ByVal ossia "By Value" indica che il valore della variabile o dell'espressione è passata al parametro. Questo metodo evita l'inconveniente di vedere la funzione modificare il contenuto della variabile passata ByVal. Così se ad esempio si ha la variabile SuaVariabile passata alla funzione col metodo ByVal, la funzione non potrà cambiare il contenuto di SuaVariabile.
ByRef ossia "By Refefence". Invece di passare il contenuto di una variabile questo metodo dà alla funzione una sorta di riferimento della variabile stessa che serve unicamente ad individuarla. Questo permetterà alla funzione di modificare il contenuto della variabile. E' da notare che solo le variabili possono essere passate ByRef al contrario delle costanti e delle espressioni. Nell'esempio fatto in precedenza si aveva di fronte la variabile SuaVariabile. Questa volta SuaVariabile verrà editata dalla funzione ed il valore di ritorno sarà dunque molto probabilmente differente da quello contenuto dalla variabile all'entrata nella funzione.
Esiste un altro paio di punti da valutare brevemente, riguardo questi due metodi. Il primo è il fatto che le stringhe di testo vengono sempre passate attraverso il metodo ByVal. In questo caso però la funzione è in grado di modificare il contenuto della variabile proprio come se fosse stata passata col metodo ByRef. Un altro punto è che le strutture sia quelle definite dall'utente che quelle delle API vengono sempre passate ByRef.
Per concludere, visto che la lezione è puramente teorica e di codice non se n'è visto manco l'ombra, conviene dare un'occhiata a qualche esempio:

  • La linea di codice sottostante dichiara una funzione che non richiede alcun parametro ( "()" ) ma che ritorna un numero intero a 32 bit (As Long):

    Declare Function GetDesktopWindow Lib "user32.dll" () As Long

  • La linea di codice sottostante dichiara una funzione che richiede un parametro a 32 bit passato ByValue ma che non ritorna alcun valore:

    Declare Function Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)

  • La linea di codice sottostante dichiara una funzione che richiede due parametri: due numeri interi a 32 bit passati ByValue e che ritorna un terzo numero intero a 32 bit:

    Declare Function ReleaseDC Lib "user32.dll" (ByVal hWnd As Long, ByVal hDC _
    As Long) As Long

  • La linea di codice sottostante dichiara una funzione che richiede una stringa come parametro e ritorna una seconda stringa:

    Declare Function CharUpper Lib "user32.dll" Alias "CharUpperA" (ByVal lpsz _
    As String) As String

    Riferimenti:
    Riferimento precedente: TUTORIALS > API > Dichiarazione (parte prima)
    Riferimento successivo : TUTORIALS > API > Handles e Device contests
    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