Salve, in questo post ho scritto una DLL che riguardava la fisica in generale, adesso invece scrivo un post che spiega come creare una propria DLL. Vi invito a leggere quanto scritto su Wikipedia per avere un'idea di cos'è una DLL ( per chi non lo sapesse ) ->
NB: Questa guida non spiegherà l'ABC di tutto ciò che scriverò, mano a mano che introdurrò un argomento sia che lo conosciate sia che non lo conosciate inserirò tra parentesi il link dove c'è scritto cos'è, sarebbe meglio però che chi legge il post abbia un po' di competenze, anche basilari del C.
La logica della creazione di una DLL preferisco strutturarla in questi due punti :
- prima di tutto dovete avere bene in mente quello che volete fare, una DLL è sì un'insieme di tante funzioni ma è anche vero che se voleste utilizzare due funzioni nei vostri programmi non sarebbe necessario creare per forza una DLL, basterebbe scriverle insieme a tutto il codice
- bisogna essere consapevoli del fatto che esistono librerie a collegamento dinamico ( appunto le nostre DLL ) e le librerie statiche (
Detto questo adesso vi spiego cosa bisogna fare per scrivere una propria DLL :
- aprite Visual Studio, cliccate su New Project > Win32 Project > Ok > Next > Selezionate DLL > Finish
- bene, adesso vi trovate di fronte ad una pagina bianca che ha solo una riga di codice : #include "stdafx.h" ( per chi non lo sapesse questo header è solo ed esclusivamente del Visual C++, non lo troverete in altri ambienti di sviluppo : la Microsoft deve sempre metterci qualcosa di personale altrimenti non è contenta ); comunque adesso la prima cosa da fare è scrivere l'header che conterrà i prototipi ( leggete la parte finale di questo post per capire cos'è il prototipo di una funzione ) delle funzioni che vorremo all'interno della nostra DLL. Per creare l'header "spostatevi" nel Solution Explorer ( a destra della "finestra di programmazione" ) e cliccate con il tasto destro su Header Files > Add > New Item > Selezionate Header File ( .h ) > Ok ( chiaramente date il nome all'header ). Bene, adesso l'header è creato e come potrete vedere non c'è nessuna riga di codice. La prima cosa da fare quando si crea l'header è quella di utilizzare le direttive al preprocessore (
NB: Il nome dell'header ( in queste 3 righe di codice ) chiaramente è facoltativo ma sarebbe più logico se lo chiamaste come lo avete chiamato al momento della creazione dell'header. Comunque, potete scrivere ciò che volete accanto a ifndef, il nome viene trattato come una variabile quindi verrà in un certo senso "ignorato" e verrà preso per "buono".
Come ho scritto sopra, nell'header risiedono i prototipi delle funzioni e vanno scritte tra la direttiva #define e la direttiva #endif ( oltre #endif non si deve scrivere nulla ). Facciamo l'esempio in cui volessi scrivere una funzione che sommi due numeri, scriverei dunque :
nell'header però la funzione così come l'ho scritta non va bene perchè ( ricordiamolo ) nell'header quello che conta sono la "definizione" ( termine storpiato da me per farvi capire meglio ) dell'header con #define e la scrittura dei prototipi delle funzioni. Il prototipo di questa funzione quindi sarebbe :
Questo è il primo prototipo della prima funzione che vogliamo creare, ovviamente se ne voleste scrivere altri basta metterli uno sotto l'altro. In definitiva il codice dell'header con l'aggiunta di altri prototipi sarebbe :
Ecco creato il nostro header.
- adesso che l'header è stato creato possiamo passare alla scrittura vera e propria delle funzioni. Le funzioni vengono scritte nel file che trovate nel Solution Explorer che riporta lo stesso nome che avete dato al progetto con l'estensione .cpp, cliccate 2 volte su quel file e, come per la scrittura dell'header, vi ritroverete con il solito include : #include "stdafx.h" ( potete cancellare quell'include ). Adesso entriamo un po' più nel dettaglio : affinchè una funzione che si trova in una DLL possa essere utilizzata deve essere "esportata", per fare questo basterà scrivere extern "C" __declspec(dllexport) che si occuperà di "prelevare" la funzione che si vuole utilizzare. Detto questo, per scrivere le funzioni vere e propria c'è bisogno di includere l'header che le contiene scrivendo #include "nome_header.h" ( sì bisogna usare le virgolette non le parentesi angolari [ < e > ] ). Adesso è possibile scrivere le funzioni vere e proprie scrivendo extern "C" __declspec(dllexport) e sotto le funzioni, in questo modo :
Così vale anche per il resto delle funzioni :
- adesso sia l'header che il file che contiene le funzioni vere e proprie sono stati creati, non ci resta che compilare per ottenere l'header, il file con le funzioni e la DLL : Build > Build Solution.
Spero di essere stato chiaro, alla prossima.
Perfavore,
Entra
oppure
Registrati
per vedere i Link!
inoltre non vi farebbe male se leggeste questo link e quest'altro. Questo post tratterà solo ed esclusivamente la creazione di una DLL utilizzando l'IDE Visual Studio 2010 ( il procedimento vale anche per le precedenti versioni fino alla 2005 ). NB: Questa guida non spiegherà l'ABC di tutto ciò che scriverò, mano a mano che introdurrò un argomento sia che lo conosciate sia che non lo conosciate inserirò tra parentesi il link dove c'è scritto cos'è, sarebbe meglio però che chi legge il post abbia un po' di competenze, anche basilari del C.
La logica della creazione di una DLL preferisco strutturarla in questi due punti :
- prima di tutto dovete avere bene in mente quello che volete fare, una DLL è sì un'insieme di tante funzioni ma è anche vero che se voleste utilizzare due funzioni nei vostri programmi non sarebbe necessario creare per forza una DLL, basterebbe scriverle insieme a tutto il codice
- bisogna essere consapevoli del fatto che esistono librerie a collegamento dinamico ( appunto le nostre DLL ) e le librerie statiche (
Perfavore,
Entra
oppure
Registrati
per vedere i Link!
) e bisogna quindi scegliere se scrivere la prima o la seconda, in base al softwareDetto questo adesso vi spiego cosa bisogna fare per scrivere una propria DLL :
- aprite Visual Studio, cliccate su New Project > Win32 Project > Ok > Next > Selezionate DLL > Finish
- bene, adesso vi trovate di fronte ad una pagina bianca che ha solo una riga di codice : #include "stdafx.h" ( per chi non lo sapesse questo header è solo ed esclusivamente del Visual C++, non lo troverete in altri ambienti di sviluppo : la Microsoft deve sempre metterci qualcosa di personale altrimenti non è contenta ); comunque adesso la prima cosa da fare è scrivere l'header che conterrà i prototipi ( leggete la parte finale di questo post per capire cos'è il prototipo di una funzione ) delle funzioni che vorremo all'interno della nostra DLL. Per creare l'header "spostatevi" nel Solution Explorer ( a destra della "finestra di programmazione" ) e cliccate con il tasto destro su Header Files > Add > New Item > Selezionate Header File ( .h ) > Ok ( chiaramente date il nome all'header ). Bene, adesso l'header è creato e come potrete vedere non c'è nessuna riga di codice. La prima cosa da fare quando si crea l'header è quella di utilizzare le direttive al preprocessore (
Perfavore,
Entra
oppure
Registrati
per vedere i Link!
) per "definire" l'header e renderlo quindi "utilizzabile". La prima riga di codice che scriveremo è quindi :
PHP:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
NB: Il nome dell'header ( in queste 3 righe di codice ) chiaramente è facoltativo ma sarebbe più logico se lo chiamaste come lo avete chiamato al momento della creazione dell'header. Comunque, potete scrivere ciò che volete accanto a ifndef, il nome viene trattato come una variabile quindi verrà in un certo senso "ignorato" e verrà preso per "buono".
Come ho scritto sopra, nell'header risiedono i prototipi delle funzioni e vanno scritte tra la direttiva #define e la direttiva #endif ( oltre #endif non si deve scrivere nulla ). Facciamo l'esempio in cui volessi scrivere una funzione che sommi due numeri, scriverei dunque :
PHP:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
nell'header però la funzione così come l'ho scritta non va bene perchè ( ricordiamolo ) nell'header quello che conta sono la "definizione" ( termine storpiato da me per farvi capire meglio ) dell'header con #define e la scrittura dei prototipi delle funzioni. Il prototipo di questa funzione quindi sarebbe :
PHP:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Questo è il primo prototipo della prima funzione che vogliamo creare, ovviamente se ne voleste scrivere altri basta metterli uno sotto l'altro. In definitiva il codice dell'header con l'aggiunta di altri prototipi sarebbe :
PHP:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Ecco creato il nostro header.
- adesso che l'header è stato creato possiamo passare alla scrittura vera e propria delle funzioni. Le funzioni vengono scritte nel file che trovate nel Solution Explorer che riporta lo stesso nome che avete dato al progetto con l'estensione .cpp, cliccate 2 volte su quel file e, come per la scrittura dell'header, vi ritroverete con il solito include : #include "stdafx.h" ( potete cancellare quell'include ). Adesso entriamo un po' più nel dettaglio : affinchè una funzione che si trova in una DLL possa essere utilizzata deve essere "esportata", per fare questo basterà scrivere extern "C" __declspec(dllexport) che si occuperà di "prelevare" la funzione che si vuole utilizzare. Detto questo, per scrivere le funzioni vere e propria c'è bisogno di includere l'header che le contiene scrivendo #include "nome_header.h" ( sì bisogna usare le virgolette non le parentesi angolari [ < e > ] ). Adesso è possibile scrivere le funzioni vere e proprie scrivendo extern "C" __declspec(dllexport) e sotto le funzioni, in questo modo :
PHP:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Così vale anche per il resto delle funzioni :
PHP:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
- adesso sia l'header che il file che contiene le funzioni vere e proprie sono stati creati, non ci resta che compilare per ottenere l'header, il file con le funzioni e la DLL : Build > Build Solution.
Spero di essere stato chiaro, alla prossima.
Ultima modifica: