Creare una DLL e utilizzarla

Un semplice procedimento per creare un file DLL e utilizzarlo in un programma in C.

Qualche tempo fa, mi sono interessato all’argomento “file DLL” (dynamic-link library ossia “libreria a collegamento dinamico”); come costruire una DLL e come utilizzarla all’interno di un sorgente C. Visitando vari forum e tutorial su internet, ho raccolto alcune preziose informazioni e ho raggiunto l’obiettivo. Tuttavia, vedendo la presenza di #include, file .h, extern, DLLimport… mi è venuta una gran voglia di… SEMPLIFICARE, SEMPLIFICARE e ancora SEMPLIFICARE il più possibile. Mi sono chiesto, molto semplicemente, “Serve davvero tutta questa roba!?“. Dopo aver lavorato sono arrivato a definire il semplice esempio, che vi mostro in questo articolo; nessun #include, nessuna extern, DLLimport non se ne parla, ma andiamo al sodo.

Descrizione dell’esempio – creazione del file dll “aMultb.dll” e suo utilizzo.

Per prima cosa ho creato una cartella di lavoro dal nome “crea-dll-utilizza-dll” che contiene soltanto 4 files. I files contenuti sono:

  1. aMultb.c – sorgente C che contiene la funzione int aMultb(int,int). Questo file diventerà la DLL aMultb.dll. La funzione suddetta esegue la moltiplicazione di due numeri interi e restituisce un risultato intero.
  2. moltiplico.c – Il sorgente C che utilizza la DLL aMultb.dll
  3. info-dll.txt – file di testo che contiene le istruzioni operative per fare la DLL e utilizzarla.
  4. qui.bat – un file batch che contiene il comando “cmd”. Serve per aprire la cartella di lavoro nella console, con un doppio click.

Riporterò ora i sorgenti C e poi le semplici istruzioni operative.

I sorgenti C – aMultb.c e moltiplico.c

Sorgente del file “aMultb.c”


int aMultb(int a, int b){

  return a*b;

}

Il file contiene la definizione della funzione int aMultb(int,int) che moltiplica 2 interi e restituisce un risultato intero.

Sorgente del file “moltiplico.c”

#include <stdio.h>

int aMultb(int,int);

int risultato;

int main() {

risultato = aMultb(7,3);

printf("%d",risultato);

              }

Il file esegue la funzione aMultb(7,3) ( Risultato 21 ) e stampa a monitor il risultato. In questo file, viene fornito soltanto il prototipo int aMultb(int,int) della funzione aMultb.

Infine pubblico la procedura operativa contenuta nel file “info-dll.txt”. Pochi, chiari passaggi per ottenere un eseguibile che necessita della DLL “aMultb.dll” oppure per un eseguibile che non necessita di nulla per funzionare.

Ecco il contenuto del file “info-dll.txt”; le istruzioni operative.

1) gcc -c aMultb.c ------------> genera il file oggetto, "aMultb.o"

2) gcc -static-libgcc -shared aMultb.o -o aMultb.dll --> genera il file     "aMultb.dll"

3) gcc -c moltiplico.c --------> genera il file oggetto, "moltiplico.o"


A questo punto ho generato i files "aMultb.o", "aMultb.dll" e "moltiplico.o". Ho due possibilità, la (4) per generare l'eseguibile che necessita della DLL e la (4 bis) per creare l'eseguibile che non necessita di nulla.

4) gcc moltiplico.o aMultb.dll -o moltiplico-con-dll.exe ----> genero l'eseguibile, "moltiplico-con-dll.exe" (non funziona se manca la DLL, "aMultb.dll")

4 bis) gcc moltiplico.o aMultb.o -o moltiplico-senza-dll.exe --> genero l'eseguibile, "moltiplico-senza-dll.exe" (funziona anche da solo...).

Pubblico infine un’immagine (cattura di una schermata) che mostra tutti i comandi e le prove pratiche. Dall’immagine si vede che l’eseguibile “moltiplico-senza-dll.exe” funziona correttamente sia prima che dopo aver cancellato la dll, mentre l’eseguibile “moltiplico-con-dll.exe” funziona bene soltanto quando è presente la dll “aMultb.dll”; senza di essa non funziona più, e compare un box di errore.

Per ora è tutto. Arrivederci al prossimo articolo.

Andrea Paolini (Amministratore del Blog).