Le DLL rappresentano uno strumento essenziale nello
sviluppo di software per Windows. Consentono di separare il
codice in moduli indipendenti, favoriscono il riutilizzo
delle funzioni e semplificano la manutenzione dei programmi.
Come creare e utilizzare una DLL in
Windows
Pubblicato il: 3-7-2026
Ultima Modifica: 3-7-2026
Come creare e utilizzare una DLL in Windows
Le DLL (Dynamic Link Library) sono uno
dei componenti fondamentali del sistema operativo Windows.
Molti programmi che utilizziamo ogni giorno fanno
affidamento su una o più DLL per condividere codice,
funzioni e risorse senza doverle duplicare all'interno di
ogni applicazione.
📚 In questo articolo scopriremo:
Cos'è una DLL
Quali vantaggi offre
Come crearne una nel linguaggio C
Come utilizzarla da un programma
Il caricamento statico e dinamico
Le funzioni LoadLibrary() e
GetProcAddress()
Gli errori più comuni
Buone pratiche di sviluppo
📌 Che cos'è una DLL?
DLL è l'acronimo di Dynamic Link Library,
cioè libreria a collegamento dinamico.
Si tratta di un file con estensione:
.dll
contenente codice eseguibile che può essere utilizzato
contemporaneamente da più programmi.
Ad esempio, invece di inserire la stessa funzione in
dieci programmi diversi, è possibile inserirla una sola
volta nella DLL.
Tutti i programmi potranno utilizzarla.
🏗️ Come funziona?
Immaginiamo questa situazione.
+----------------+
| MiaLibreria |
| DLL |
+----------------+
▲ ▲ ▲
│ │ │
+---------+ │ +---------+
│ │ │
+---------------+ +---------------+ +---------------+
| Programma A | | Programma B | | Programma C |
+---------------+ +---------------+ +---------------+
Tutti i programmi utilizzano la stessa libreria.
🎯 Perché usare una DLL?
I vantaggi sono numerosi.
✅ codice riutilizzabile
✅ programmi più piccoli
✅ manutenzione semplificata
✅ aggiornamento di una sola libreria
✅ minore occupazione della memoria
📦 Cosa può contenere una DLL?
Una DLL può contenere:
funzioni
variabili globali
classi (in C++)
immagini
icone
finestre di dialogo
menu
stringhe
risorse varie
🛠️ Come si crea una DLL?
Una DLL è molto simile ad un normale programma C.
La differenza principale è che non contiene una funzione
main().
Espone invece una o più funzioni che potranno essere
richiamate da altri programmi.
✏️ Creiamo una semplice DLL
Supponiamo di voler creare una libreria matematica.
Conterrà due funzioni:
Somma
Moltiplicazione
📄 File MyMath.h
Questo file contiene le dichiarazioni delle funzioni.
#ifndef MYMATH_H #define MYMATH_H
__declspec(dllexport) int Somma(int a, int b);
__declspec(dllexport) int Moltiplica(int a, int b);
#endif
🔎 Cosa significa __declspec(dllexport)?
Questa direttiva comunica al compilatore che la funzione
deve essere esportata dalla DLL.
Sarà quindi visibile ai programmi esterni.
📄 File MyMath.c
#include "MyMath.h"
int Somma(int a, int b) { return a + b; }
int Moltiplica(int a, int b) { return a * b; }
Queste saranno le funzioni disponibili nella DLL.
📦 Il risultato della compilazione
Compilando il progetto si ottengono normalmente tre file.
MyMath.dll
MyMath.lib
MyMath.exp
Il più importante è naturalmente:
MyMath.dll
🔗 Come utilizzare la DLL?
Esistono due tecniche principali.
📌 Collegamento statico
oppure
📌 Collegamento dinamico.
🔹 Collegamento statico
È il metodo più semplice.
Durante la compilazione il programma conosce già la DLL.
Basta includere l'header.
#include "MyMath.h"
Successivamente si utilizzano normalmente le funzioni.
int risultato;
risultato = Somma(10,20);
printf("%d", risultato);
Per il programmatore è quasi come utilizzare una normale
funzione.
⚡ Collegamento dinamico
Molto più interessante.
Il programma carica la DLL durante l'esecuzione.
Questo permette di:
✔ caricare librerie opzionali
✔ sostituire facilmente una DLL
✔ creare sistemi con plugin
📥 LoadLibrary()
La funzione che carica una DLL è:
HMODULE LoadLibrary(LPCSTR nomeDLL);
Esempio:
HMODULE libreria;
libreria = LoadLibrary("MyMath.dll");
Se tutto va bene viene restituito un handle.
Altrimenti viene restituito:
NULL
🔎 Cercare una funzione
Dopo aver caricato la DLL bisogna individuare la
funzione.
Si utilizza:
GetProcAddress()
💻 Esempio
typedef int (*FUNZIONE)(int,int);
FUNZIONE Somma;
Somma = (FUNZIONE)GetProcAddress(libreria,"Somma");
Adesso possiamo utilizzare normalmente la funzione.
Se il file non è presente nella cartella del programma o
in uno dei percorsi di ricerca di Windows, il caricamento
fallirà.
Tipo di funzione errato
Il tipo del puntatore deve coincidere perfettamente con
quello della funzione esportata.
📂 Dove cerca Windows una DLL?
Generalmente Windows cerca la DLL:
nella cartella del programma;
nella directory di sistema;
nella directory di Windows;
nelle cartelle indicate nella variabile d'ambiente
PATH.
Per evitare problemi, durante lo sviluppo è consigliabile
copiare la DLL nella stessa cartella dell'eseguibile.
📚 DLL e file LIB
Quando si crea una DLL, il compilatore genera spesso
anche un file con estensione .lib.
È importante non confondere i due file:
File
Funzione
.dll
Contiene il codice eseguibile caricato a runtime
.lib
Contiene le informazioni necessarie al linker
per il collegamento statico
🚀 Quando conviene utilizzare una DLL?
Le DLL sono particolarmente utili quando:
più programmi condividono le stesse funzioni;
si desidera aggiornare una libreria senza ricompilare
tutte le applicazioni;
si vogliono sviluppare sistemi modulari con plugin;
si realizzano librerie da distribuire ad altri
sviluppatori.
💡 Un esempio pratico
Immaginiamo di sviluppare un gestionale.
Potremmo suddividere il progetto in più DLL:
📊 Contabilità.dll
👥 Clienti.dll
📦 Magazzino.dll
🧾 Fatture.dll
📈 Statistiche.dll
Il programma principale si limiterà a richiamare le
funzioni delle varie librerie, rendendo il progetto più
ordinato, modulare e semplice da aggiornare.
🏁 Conclusioni
Le DLL rappresentano uno strumento essenziale nello
sviluppo di software per Windows. Consentono di separare il
codice in moduli indipendenti, favoriscono il riutilizzo
delle funzioni e semplificano la manutenzione dei programmi.
Per chi inizia a programmare in C, comprenderne il
funzionamento è un passo importante verso lo sviluppo di
applicazioni più professionali. Dopo aver acquisito
familiarità con la creazione e l'utilizzo di una semplice
DLL, sarà possibile affrontare argomenti più avanzati, come
l'esportazione di classi in C++, la gestione delle risorse,
la creazione di plugin e l'interazione tra applicazioni
attraverso librerie condivise.
💡 Consiglio finale: inizia realizzando
una piccola DLL con poche funzioni matematiche o di gestione
delle stringhe. Una volta compreso il meccanismo di
esportazione e caricamento delle funzioni, potrai costruire
librerie sempre più complesse e riutilizzabili nei tuoi
progetti futuri.