Una DLL (Dynamic Link Library) funge da libreria condivisa di funzioni che possono essere richiamate da numerose applicazioni e altre DLL. Delphi ti consente di creare e utilizzare DLL in modo da poter chiamare queste funzioni a piacimento. Tuttavia, è necessario importare queste routine prima di poterle chiamare.
Le funzioni esportate da una DLL possono essere importate in due modi: dichiarando una procedura o funzione esterna (statica) o chiamando direttamente le funzioni API specifiche della DLL (dinamica).
Consideriamo una semplice DLL. Di seguito è riportato il codice per "circle.dll" che esporta una funzione, denominata "CircleArea", che calcola l'area di un cerchio utilizzando il raggio specificato:
Una volta che hai il circle.dll, puoi usare la funzione "CircleArea" esportata dalla tua applicazione.
Il modo più semplice per importare una procedura o una funzione è dichiararla utilizzando la direttiva esterna:
Se includi questa dichiarazione nella parte dell'interfaccia di un'unità, circle.dll viene caricato una volta all'avvio del programma. Durante l'esecuzione del programma, la funzione CircleArea è disponibile per tutte le unità che utilizzano l'unità in cui si trova la dichiarazione di cui sopra.
È possibile accedere alle routine in una libreria tramite chiamate dirette alle API Win32, incluso LoadLibrary, FreeLibrary, e GetProcAddress. Queste funzioni sono dichiarate in Windows.pas.
Ecco come chiamare la funzione CircleArea usando il caricamento dinamico:
Durante l'importazione mediante caricamento dinamico, la DLL non viene caricata fino alla chiamata a LoadLibrary. La libreria viene scaricata dalla chiamata a FreeLibrary.
Con il caricamento statico, la DLL viene caricata e le sue sezioni di inizializzazione vengono eseguite prima dell'esecuzione delle sezioni di inizializzazione dell'applicazione chiamante. Questo è invertito con caricamento dinamico.
Ecco un semplice sguardo ai vantaggi e agli svantaggi del caricamento DLL statico e dinamico:
Caricamento statico
Professionisti:
Contro: