A differenza della libreria statica che abbiamo visto nel precedente articolo, la libreria dinamica viene caricata soltanto quando il nostro programma è in esecuzione (runtime).
Altra importante caratteristica è che la libreria dinamica può essere condivisa (shared) tra più programmi in esecuzione.
Passiamo subito alla pratica e scriviamo quattro files.
Modulo libreria
''nome del file: funzioni_utili.bas
''funzione per il calcolo dell'area di un quadrato
public function area_quadrato(byval l as integer) _
as integer
return l * l
end function
Una volta salvato il file dobbiamo compilarlo specificando al compilatore FreeBASIC che vogliamo creare proprio una libreria dinamica:
fbc -dll [eventuale percorso]\funzioni_utili.bas
Se tutto è andato in porto troveremo nella stessa cartella contenente il file sorgente la nostra libreria.
Sui sistemi operativi Linux l’estensione del file sarà .so, mentre sul sistema operativo Windows l’estensione del file sarà .dll.
A questo punto il file della libreria dinamica va spostato in specifiche cartelle a seconda del sistema operativo:
- su Linux: /usr/lib
- su Windows: la cartella di sistema (p.e. C:\Windows\System32)
Interfaccia
Come abbiamo già fatto per rendere facilmente disponibile la libreria statica, anche per la libreria dinamica creiamo la nostra interfaccia (API) sfruttando un file di intestazione:
''nome file: funzioni_utili.bi
#inclib "funzioni_utili" ''include il modulo libreria
''dichiara la funzione
declare function area_quadrato(byval l as integer) _
as integer
Test
Creiamo adesso due programmi sostanzialmente identici che, una volta mandati in esecuzione, condivideranno la medesima libreria dinamica.
Programma 1
''nome file: test1.bas #include "funzioni_utili.bi" ''include l'interfaccia dim a as integer ''stampa l'area del quadrato do input "Test 1: Inserisci la lunghezza del lato: "; a print "L'area del quadrato vale: "; area_quadrato(a) loop until a = 0
Programma 2
''nome file: test2.bas #include "funzioni_utili.bi" ''include l'interfaccia dim a as integer ''stampa l'area del quadrato do input "Test 2: Inserisci la lunghezza del lato: "; a print "L'area del quadrato vale: "; area_quadrato(a) loop until a = 0
Bene! Con questo articolo possiamo per ora ritenere la nostra conoscenza dell’uso delle librerie in FreeBASIC sufficiente.
Ricordiamoci però sempre di ben commentare le nostre librerie per aiutare chi volesse utilizzarle a capire velocemente come funzionano.
A rileggerci al prossimo articolo. 🙂

