programmazione
DLL 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.
         home page  
 

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.

 
int r;

r = Somma(5,7);

printf("%d",r);

Output

12

🧹 Liberare la DLL

Quando non serve più bisogna scaricarla.

  
FreeLibrary(libreria);

È buona norma farlo sempre.


🎨 Schema del caricamento dinamico

Programma

      │

LoadLibrary()

      │

      ▼

MyMath.dll

      │

GetProcAddress()

      │

      ▼

Somma()

      │

      ▼

Risultato

📌 Controllare gli errori

Prima di utilizzare una DLL è opportuno verificare che sia stata caricata.

 
if(libreria == NULL)
{
    printf("DLL non trovata.");
    return 1;
}

Anche la funzione deve esistere.

 
if(Somma == NULL)
{
    printf("Funzione inesistente.");
}

⚠️ Errori comuni

Dimenticare di esportare la funzione

 
int Somma(...)

senza

 
__declspec(dllexport)

non sarà visibile.


Nome errato

 
GetProcAddress(...,"somma");

non trova

Somma

Le maiuscole e minuscole sono importanti.


DLL assente

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:

  1. nella cartella del programma;

  2. nella directory di sistema;

  3. nella directory di Windows;

  4. 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.