Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
I n definitiva che cosa s o n o le API? API s t a p e r Application Programming I nterface, e chiaramente laddove
s o n o s t a t e sviluppate n o n h a n n o il ridicolo significato che acquistano nella lingua Italiana. I n pratica come il
t a s t o della calcolatrice che usiamo q u o t i d i a n a m e n t e è l'interfaccia della calcolatrice s t e s s a , le API s o n o le
interfacce a d esempio del sistema operativo. Dove n a t u r a l m e n t e creare u n 'interfaccia significa m e t t e r e in
correlazione l'u t e n t e con (nell'esempio che si è f a t t o ) il sistema operativo. Le API di u n sistema operativo
s o n o la ragione principale p e r cui esiste incompatibilità t r a i vari sistemi presenti sul mercato, basti p e n s a r e
al s o f t w a r e s u p p o r t a t o d a u n sistema operativo p e r Machintosh e quello s u p p o r t a t o d a W i n d o w s . E' possibile
p e r ò r e n d e r e q u e s t o compatibile con quello s o l t a n t o tramite u n emulatore, u n vero e proprio t r a d u t t o r e e d
i n t e r p r e t e delle le API di u n sistema nelle relative API di u n secondo sistema.
A cosa servono?
I n poche parole le API fanno t u t t o ciò che p u ò fare W i n d o w s (o in generale u n sistema operativo). Ed anche
se nei programmi che normalmente sviluppiamo n o n usiamo in m o d o esplicito alcuna funzione del g e n e r e , il
linguaggio di programmazione (in q u e s t o caso Visual Basic), si p e r m e t t e r à di richiamare alcune API p e r
permetterci di o t t e n e r e i risultati che speravamo.
Dove sono?
I n pratica ogni funzione API di W i n d o w s è s i t u a t a in u n file DLL (D ynamic Link Library) a s u a volta p o s t o nella
directory C: \ W i n d o w s \ S y s t e m s o più in gererale laddove è posizionata la directory del sistema operativo.
Q u e s t o file di formato .DLL n o n fanno altro che importare le funzioni API immagazzinandole d e n t r o di sè,
rubandole in poche parole al sistema operativo e rendendole disponibili anche al di fuori. Q u e s t o p e r m e t t e di
utilizzare t u t t e le funzioni del sistema operativo in maniera relativamente semplice, senza bisogno di
difficoltose procedure di accesso al sistema operativo. Il grosso delle funzioni si p o s s o n o t r o v a r e nei files
user32.dll (funzioni di interfaccia u t e n t e ), kernel32.dll (le funzioni principali del sistema operativo), gdi32.dll (le
funzioni di impostazione s t r e t t a m e n t e grafica) e shell32.dll (le funzioni shell).
Sebbene ci si riferisca alle API come " funzioni", le funzioni s o n o solo u n a p a r t e delle API di W i n d o w s . La lista
che s e g u e identifica infatti t u t t i gli o g g e t t i che le compongono:
Funzioni come già accennato le funzioni sono il nucleo delle API di Windows in quanto rappresentano
il modo più potente per svolgere tutte le operazioni messe a disposizione dal sistema
operativo. Come già detto sono racchiuse in files di estensione .dll.
Strutture Le strutture (come MENUITEMINFO). non fanno altro che raggruppare e conservare gruppi di
informazioni. Questo per permettere alle singole funzioni di poter accedere a tali dati senza
dover essere caricate di un numero eccessivo di parametri.
Le API di Windows spesso utilizzano codici numerici per
le informazioni. Dichiarare e nominare tali costanti
corrisponde ad un sistema più veloce e chiaro di fare
Costanti riferimento alle informazioni. Spesso le costanti vengono
utilizzate come flags: ogni costante può cioè essere un
flag binario o multiplo, permettendo in questo modo di
archiviare il maggior numero possibile di informazioni.
MsgBox (Command1.hWnd)
MsgBox (Form1.hDC)
I n o l t r e , poichè i files DLL che custodiscono le API di W i n d o w s s o n o stati creati con l'utilizzo di C+ + , molte
funzioni richiedono di indicare il p u n t a t o r e a q u e s t o o a quell'o g g e t t o , s o t t o f o r m a di p a r a m e t r o .
L'a r g o m e n t o dei p u n t a t o r i è p i u t t o s t o complesso e richiederebbe u n o studio che p e r il m o m e n t o n o n
interessa, visti gli scopi di q u e s t o articolo. Passiamo quindi d i r e t t a m e n t e all'ultimo o g g e t t o dell'analisi: i Flags
Le costanti o flags
Un flag n o n è altro che u n o speciale tipo di c o s t a n t e . Che cosa differisce allora dalle altre costanti?
Principalmente il f a t t o che p o s s o n o essere combinate con altre costanti. Q u e s t o p e r m e t t e di o t t e n e r e
combinazioni multiple utilizzando u n a sola c o s t a n t e , come si farebbe normalmente. Pensiamo infatti che a d
esempio a t t r a v e r s o u n a sola c o s t a n t e flag è possibile passare a d u n a funzione API a d esempio u n a serie di
combinazioni del tipo: on/ off o si/ no come preferite. Q u a n d o si combinano più flags s a r e b b e cosa o p p o r t u n a
utilizzare l'o p e r a t o r e Booleano Or. Q u e s t o infatti previene dal formare u n a combinazione di flags e r r o n e a o
che comunque n o n r a p p r e s e n t a ciò che volevamo (sempre che comunque sia u n a combinazione valida).
Consideriamo a d esempio u n a funzione che accetta u n solo p a r a m e t r o . La funzione fa apparire u n a finestra
di messaggio. Il p a r a m e t r o si riferisce al p u l s a n t e che si vuole far comparire sulla finestra (a d esempio: OK,
OK-Annulla e così via). Un flag combinato che individua il tipo di p u l s a n t e che d e v e apparire p u ò essere a d
esempio:
Const PK_OK = 1
Const PK_CANCEL = 2
Const PK_OKCANCEL = 3
che invece farebbe apparire la combinazione di d u e pulsanti: " OK" e " CANCEL". Q u e s t o dimostra perchè u n
flag è u n a combinazione di costanti. Allora nel caso in cui il p r o g r a m m a t o r e volesse richiamare la funzione
assegnandole il p a r a m e t r o PK_OK gli b a s t e r e b b e fare u n a cosa del g e n e r e :
ValoreDiRitorno = Funzione(PK_OK)
Bisogna a q u e s t o p u n t o fare a t t e n z i o n e . Non è possibile infatti richiamare u n a combinazione col s e g n o " + " .
Q u e s t o perchè se a d esempio scriviamo:
p e r o t t e n e r e la combinazione dei pulsanti " OK" e " CANCEL", si o t t e r r e b b e u n altro p u l s a n t e (a d esempio "?")
in q u a n t o il + fa la somma di 1 e 2 e n o n di " OK" e " CANCEL". Ecco perchè b a s t e r e b b e allora utilizzare Or
Per definire u n a s t r u t t u r a in Visual Basic, si utilizza u n blocco di codice che comincia con Type e termina con
Type STRUTTURADIESEMPIO
Variabile_Long As Long
Altra_Variabile_Long As Long
Testo As String
Altro_Testo As String * 24
Altra_Struttura As RECT
End Type
Dim Es As STRUTTURADIESEMPIO
Es.Variabile_Long = 50
Es.Altra_Variabile = 40 + Es.Variabile_Long
Es.Testo = "testo"
nel m o m e n t o in cui si termina di scrivere As ci si accorge che è possibile selezionare dalla lista dei tipi di dati,
anche SSTRUTT ossia il tipo d a noi a p p e n a g e n e r a t o . L'icona visualizzata alla sinistra di SSTRUTT è quella
tipica dei tipi definiti dall'u t e n t e .
Q u a n d o andiamo invece a d a s s e g n a r e la stringa di t e s t o " Giovanni" a d U t e n t e , n o n facciamo altro che
a s s e g n a r e u n valore a d u n e l e m e n t o della s t r u t t u r a . Ossia l'e l e m e n t o viene finalmente definito.
Da a d e s s o in poi possiamo fare u s o di tale e l e m e n t o proprio come utilizzeremmo u n a variabile q u a l u n q u e .
Ad esempio, possiamo definire anche la variabile Cognome e nella routine Command1_Click unire Nome e
Cognome con l'o p e r a t o r e di concatenazione "&", come faremmo nel caso di d u e semplici variabili di t e s t o .
Ecco l'esempio completo:
Come già si è visto le s t r u t t u r e s o n o molto frequenti all'interno delle dichiarazioni delle funzioni. Q u e s t o
perchè con u n solo p u n t a t o r e a d u n a s t r u t t u r a è possibile richiamare u n n u m e r o di informazioni molto
superiore a quello assegnabile a d u n singolo p a r a m e t r o . Se infatti definiamo puntatore ad una s t r u t t u r a
l'indicatore di passaggio d a u n a dichiarazione di u n a funzione a d u n a s t r u t t u r a , a d esempio:
L'utilizzo delle funzioni callback si rivela molto semplice con l'utilizzo dell'istruzione AddressOf che contiene
l'indirizzo della funzione callback.
Cosa molto i m p o r t a n t e d a ricordare è che la funzione callback d e v 'essere pubblica (Public Function) e
c o n t e n u t a in u n modulo e n o n all'interno di u n modulo di form.
Q u e s t o p e r p e r m e t t e r e la piena accessibilità delle funzioni API in qualsiasi p a r t e del codice siano s t a t e
inserite. Le limitazioni all'utilizzo dell'o p e r a t o r e AddressOf s o n o molto chiare nella documentazione di
sviluppo di Visual Studio:
1 . " La routine Sub, Function o Property richiamata con AddressOf d e v e trovarsi nello s t e s s o p r o g e t t o delle
dichiarazioni e routine correlate. "
2 . " È possibile utilizzare AddressOf solo con routine Sub, Function o Property definite dall'u t e n t e . Non è
possibile utilizzarla con funzioni e s t e r n e dichiarate con l'istruzione Declare o con funzioni a cui si fa
riferimento d a librerie dei tipi. "
AddressOf NomeFunzione
d o v e n a t u r a l m e n t e NomeFunzione indica il n o m e della funzione callback che si vuole chiamare ogni volta che
la funzione API ritorna u n risultato utile.
I n definitiva quindi utilizzare u n p u n t a t o r e a d u n a funzione callback significa passare il valore r i t o r n a t o dalla
funzione API alla funzione callback:
Windows a 3 2 bit
Che cosa significa che W i n d o w s è u n sistema operativo a 3 2 bit? Niente di più che t u t t i i valori passati come
parametri alle s u e funzioni interne (le API p e r intenderci) s o n o interi a 3 2 bit.
Q u e s t a dichiarazione p u ò apparire in effetti s t r a n a , s o p r a t t u t t o d o p o che si è visto in dettaglio l'utilizzo e d il
significato di ogni p a r t e di u n a funzione, perchè dalla dichiarazione di u n a qualsiasi funzione risulta che le
p u ò essere p a s s a t o come p a r a m e t r o sì u n intero, ma anche u n valore t e s t u a l e , u n a s t r u t t u r a e così via.
Se infatti consideriamo come funzione di esempio l'API joyGetPos:
Private Declare Function joyGetPos Lib "winmm.dll" (ByVal uJoyID As Long, pji As JOYINFO) As Long
notiamo che è richiesto come p a r a m e t r o sia u n valore intero che u n a variabile che fa riferimento a d u n a
s t r u t t u r a (la s t r u t t u r a JOYINFO).
Andando oltre q u e s t o esempio esistono alcune funzioni che richiedono variabili stringa, array, b y t e e così via.
Che cosa significa allora che anche in questi casi s o n o passati in realtà degli interi a 3 2 bit?
Q u e s t o è il significato in poche parole del termine ByRef d o v e Ref abbrevia la parola Reference e n o n indica
altro che u n intero a 3 2 bit. I n realtà quindi passare u n qualsiasi valore a d u n a funzione di sistema n o n
significa altro che passare il riferimento a tale valore.
Così passare la s t r u t t u r a JOYINFO alla funzione joyGetPos n o n significa p a s s a r n e t u t t i i membri bensì
p a s s a r n e u n riferimento in forma di intero a 3 2 bit.
Le stringhe di testo
e si considera u n a variabile del tipo STRUTTURA che contiene il t e s t o " Q u e s t o è solo u n esempio" :
MsgBox Len(Var)
6. R I F E R I M E N T I A I CONCETTI ESAMINATI
I n q u e s t o capitolo v e n g o n o p r e s e n t a t i i collegamenti ai concetti più importanti analizzati nel corso della
guida.
Corso di Visual Basic
S t r u t t u r a MENUITEMINFO
S t r u t t u r a JOYINFO
Funzione MsgBox
Proprietà
Istruzioni e routine
Tipi di dati
A) Le guide della collana "i .pdf di VISUAL BASIC I T A L I A"
Tutte le guide elencate s o n o scaricabili g r a t u t i t a m e n t e al sito Visual Basic Italia
B) N o t e legali
Non è consentita la riproduzione anche parziale dei contenuti di q u e s t a guida senza autorizzazione
dell'a u t o r e . L'a u t o r e e d i responsabili del sito n o n p o s s o n o essere considerati responsabili di eventuali danni
causati a p e r s o n e o cose derivanti d a u n u s o e r r a t o delle informazioni presenti nella guida. Per contatti o
chiarimenti utilizzare l'indirizzo di p o s t a elettronica indicato nel sito.