Come Creare un File DLL
I file DLL (dall'inglese Dynamic-Linked Library) rappresentano delle librerie dinamiche di Windows create e gestite tramite il linguaggio di programmazione C++. Lo scopo delle DLL è quello di semplificare la condivisione e la gestione del codice di programmazione. Questo articolo spiega come creare un file DLL usando Visual Studio, un'app per Windows oppure Visual Studio per Mac. Durante l'installazione, assicurati che il pulsante di spunta "Sviluppo di applicazioni desktop con C++" sia selezionato. Se hai già installato Visual Studio, ma non hai incluso l'installazione del componente indicato, dovrai eseguire nuovamente la procedura guidata di installazione per aggiornare il tuo ambiente di sviluppo.
1. **Avvia Visual Studio.** Puoi farlo dal menu "Start" o dalla cartella "Applicazioni". Dato che un file DLL non è altro che una libreria contenente del codice compilato, si tratta solo di un piccolo pezzo di un progetto e spesso richiede l'uso di un'applicazione per poter essere utilizzato o per avere accesso al suo contenuto.

Puoi scaricare Visual Studio per Windows da questo link: https://docs.microsoft.com/it-it/visualstudio/install/install-visual-studio?view=vs-2019

Visual Studio per Mac può essere scaricato da questo link: https://docs.microsoft.com/it-it/visualstudio/mac/installation?view=vsmac-2019

Questo articolo sfrutta del codice sorgente di esempio fornito direttamente dalla Microsoft per spiegare come si crea e si compila una DLL.
2. **Clicca sul menu File.** È collocato nella parte superiore della finestra del programma (in Windows) oppure dello schermo (su Mac).
3. **Clicca sulla voce Nuovo e scegli l'opzione Progetto.** Verrà visualizzata la finestra di dialogo "Crea un nuovo progetto".
4. **Imposta le opzioni relative a Linguaggio, Piattaforma e Tipo di progetto.** Si tratta di una serie di filtri in base ai quali verrà creato l'elenco dei modelli di progetti a tua disposizione.
Clicca sul menu a discesa  e clicca sull'opzione.
5. **Clicca sul menu a discesa Piattaforma e scegli l'opzione Windows.** 
6. **Clicca sul menu Tipo di progetto e scegli l'opzione Libreria.** 
7. **Clicca sulla voce Libreria a collegamento dinamico (DLL).** L'opzione selezionata verrà visualizzata in blu. A questo punto clicca sul pulsante  per continuare.
8. **Assegna un nome al tuo progetto digitandolo nella casella di testo "Nome".** Per esempio, usa il nome "MathLibrary".
9. **Clicca sul pulsante Crea.** Il progetto per la creazione di una DLL verrà preparato automaticamente da Visual Studio
10. **Aggiungi un file di intestazione per la DLL.** Clicca sull'opzione "Aggiungi nuovo elemento" dal menu "Progetto".

Seleziona l'opzione  dal menu collocato sul lato sinistro della finestra di dialogo apparsa.
Seleziona la voce  dal riquadro principale della finestra di dialogo.
Digita il nome "MathLibrary.h" nel campo di testo visibile nella parte inferiore della finestra.
Clicca sul pulsante  per generare un file di intestazione vuoto.
11. **Inserisci il seguente codice sorgente all'interno del file di intestazione che hai appena creato.** Il codice di esempio è stato fornito direttamente dal sito web della Microsoft.
 

// MathLibrary.h - Contains declarations of math functions
#pragma once
#ifdef MATHLIBRARY_EXPORTS
#define MATHLIBRARY_API __declspec(dllexport)
#else
#define MATHLIBRARY_API __declspec(dllimport)
#endif

// The Fibonacci recurrence relation describes a sequence F
// where F(n) is { n = 0, a
//               { n = 1, b
//               { n > 1, F(n-2) + F(n-1)
// for some initial integral values a and b.
// If the sequence is initialized F(0) = 1, F(1) = 1,
// then this relation produces the well-known Fibonacci
// sequence: 1, 1, 2, 3, 5, 8, 13, 21, 34,...

// Initialize a Fibonacci relation sequence
// such that F(0) = a, F(1) = b.
// This function must be called before any other function.
extern "C" MATHLIBRARY_API void fibonacci_init(
    const unsigned long long a, const unsigned long long b);

// Produce the next value in the sequence.
// Returns true on success and updates current value and index;
// false on overflow, leaves current value and index unchanged.
extern "C" MATHLIBRARY_API bool fibonacci_next();

// Get the current value in the sequence.
extern "C" MATHLIBRARY_API unsigned long long fibonacci_current();

// Get the position of the current value in the sequence.
extern "C" MATHLIBRARY_API unsigned fibonacci_index();


Il codice di esempio è reperibile direttamente sul sito web della Microsoft relativo alla documentazione online
12. **Aggiungi un file CPP alla DLL.** Clicca sull'opzione Aggiungi nuovo elemento dal menu "Progetto".

Seleziona la voce "Visual C++" dal menu collocato sul lato sinistro della finestra.
Scegli la voce "File C++ (.cpp)" dal riquadro centrale della finestra.
Digita il nome "MathLibrary.cpp" all'interno del campo "Nome" collocato nella parte inferiore della finestra.
Clicca sul pulsante Aggiungi per generare un file vuoto.
13. **Incolla il seguente codice all'interno del file vuoto che hai appena creato.** // MathLibrary.cpp : Defines the exported functions for the DLL.
#include "stdafx.h" // use pch.h in Visual Studio 2019
#include <utility>
#include <limits.h>
#include "MathLibrary.h"

// DLL internal state variables:
static unsigned long long previous_;  // Previous value, if any
static unsigned long long current_;   // Current sequence value
static unsigned index_;               // Current seq. position

// Initialize a Fibonacci relation sequence
// such that F(0) = a, F(1) = b.
// This function must be called before any other function.
void fibonacci_init(
    const unsigned long long a,
    const unsigned long long b)
{
    index_ = 0;
    current_ = a;
    previous_ = b; // see special case when initialized
}

// Produce the next value in the sequence.
// Returns true on success, false on overflow.
bool fibonacci_next()
{
    // check to see if we'd overflow result or position
    if ((ULLONG_MAX - previous_ < current_) ||
        (UINT_MAX == index_))
    {
        return false;
    }

    // Special case when index == 0, just return b value
    if (index_ > 0)
    {
        // otherwise, calculate next sequence value
        previous_ += current_;
    }
    std::swap(current_, previous_);
    ++index_;
    return true;
}

// Get the current value in the sequence.
unsigned long long fibonacci_current()
{
    return current_;
}

// Get the current index position in the sequence.
unsigned fibonacci_index()
{
    return index_;
}


Il codice di esempio è reperibile direttamente sul sito web della Microsoft relativo alla documentazione online.
14. **Clicca sul menu Compilazione.** È collocato nella parte superiore della finestra del progetto (in Windows) o lungo il lato superiore dello schermo (su Mac).
15. **Clicca sull'opzione Compila soluzione.** Dopo aver cliccato sull'opzione indicata vedrai apparire un testo simile al seguente:


1>------ Inizio compilazione: Progetto: MathLibrary, Configurazione: Debug Win32 ------
1>MathLibrary.cpp
1>dllmain.cpp
1>Generazione del codice...
1>Creazione libreria C:\Users\username\Source\Repos\MathLibrary\Debug\MathLibrary.lib e oggetto C:\Users\username\Source\Repos\MathLibrary\Debug\MathLibrary.exp
1>MathLibrary.vcxproj -> C:\Users\username\Source\Repos\MathLibrary\Debug\MathLibrary.dll
1>MathLibrary.vcxproj -> C:\Users\username\Source\Repos\MathLibrary\Debug\MathLibrary.pdb (Partial PDB)
========== Compilazione: 1 completate, 0 non riuscite, 0 aggiornate, 0 ignorate ==========


Se la creazione della DLL è andata a buon fine, all'interno della finestra "Output" di Visual Studio vedrai apparire il testo indicato. Se sono stati rilevati degli errori nel codice, vedrai apparire l'elenco in modo da poterli correggere.
{"url": "https://www.wikihow.it/Creare-un-File-DLL", "language": "it"}