Procedura dettagliata: creazione e utilizzo di un assembly gestito (C++)

Un assembly gestito è un tipo di libreria che è possibile creare per riutilizzare il codice in maniera efficiente. Anziché implementare le stesse routine in molti programmi, è possibile scriverle una sola volta, quindi fare riferimento a esse da applicazioni che ne richiedono le funzionalità.

In questa procedura dettagliata vengono illustrate le seguenti attività:

  • Creazione di un progetto Libreria di classi.

  • Aggiunta di una classe alla libreria di classi.

  • Creazione di un'applicazione che fa riferimento alla libreria di classi.

  • Utilizzo della funzionalità della libreria di classi nell'applicazione.

  • Esecuzione dell'applicazione.

Prerequisiti

Per completare questa procedura dettagliata è necessario comprendere le nozioni di base del linguaggio C++. Chi sta iniziando ad apprendere le prime nozioni di C++ troverà particolarmente utili le informazioni per utenti principianti di C++ di Herb Schildt, disponibile nel sito Beginner Developer Learning Center sul sito Web MSDN (informazioni in lingua inglese).

Per creare un progetto Libreria di classi

  1. Scegliere Nuovo dal menu File, quindi fare clic su Progetto.

  2. Nel riquadro Tipi progetto in Visual C++ selezionare CLR.

    Con ogni tipo di progetto in questo gruppo è possibile creare un progetto destinato a Common Language Runtime (CLR).

  3. Nel riquadro Modelli selezionare Libreria di classi.

  4. Nella casella Nome digitare il nome per il progetto, ad esempio MathFuncsAssembly. Nel campo Nome soluzione digitare un nome per la soluzione, ad esempio ManagedAssemblies.

  5. Scegliere OK per creare il progetto.

  6. Per impostazione predefinita, un progetto viene creato con l'impostazione che prevede l'utilizzo di un'intestazione precompilata. Per disabilitare l'intestazione precompilata per il progetto MathFuncsAssembly, selezionarlo in Esplora soluzioni, quindi fare clic su Proprietà dal menu Progetto. Espandere il nodo Proprietà di configurazione e il nodo C/C++, quindi scegliere Intestazioni precompilate. Nell'elenco accanto a Crea/Usa intestazione precompilata selezionare Senza intestazioni precompilate. Scegliere OK per salvare le modifiche. Per ulteriori informazioni, vedere Creating Precompiled Header Files.

Per aggiungere una classe alla libreria di classi

  1. Dopo la creazione di una libreria di classi CLR, verrà automaticamente creata una classe di base. Il file di intestazione e il file di origine generati avranno entrambi lo stesso nome dato al progetto al momento della creazione. In questo esempio, i file sono denominati MathFuncsAssembly.h e MathFuncsAssembly.cpp.

  2. Sostituire il codice esistente in MathFuncsAssembly.h utilizzando una classe di base denominata MyMathFuncsAssembly. Questa classe consente di eseguire operazioni matematiche comuni, come addizione, sottrazione, moltiplicazione e divisione. È necessario che l'aspetto del codice sia simile all'esempio seguente.

    // MathFuncsAssembly.h
    
    using namespace System;
    
    namespace MathFuncs
    {
        public ref class MyMathFuncs
        {
        public:
            // Returns a + b
            static double Add(double a, double b);
    
            // Returns a - b
            static double Subtract(double a, double b);
    
            // Returns a * b
            static double Multiply(double a, double b);
    
            // Returns a / b
            // Throws DivideByZeroException if b is 0
            static double Divide(double a, double b);
        };
    }
    
  3. Implementare la funzionalità per MyMathFuncs nel file di origine. È necessario che l'aspetto del codice sia simile all'esempio seguente.

    // MathFuncsAssembly.cpp
    // compile with: /clr /LD
    
    #include "MathFuncsAssembly.h"
    
    namespace MathFuncs
    {
        double MyMathFuncs::Add(double a, double b)
        {
            return a + b;
        }
    
        double MyMathFuncs::Subtract(double a, double b)
        {
            return a - b;
        }
    
        double MyMathFuncs::Multiply(double a, double b)
        {
            return a * b;
        }
    
        double MyMathFuncs::Divide(double a, double b)
        {
            if (b == 0)
            {
                throw gcnew DivideByZeroException("b cannot be zero!");
            }
    
            return a / b;
        }
    }
    
  4. Compilare la libreria di classi scegliendo Compila soluzione dal menu Compila. Verrà creata una DLL (Dynamic Link Library) utilizzabile da altri programmi. Per ulteriori informazioni sulle DLL, vedere DLL.

Per creare un'applicazione console che faccia riferimento alla libreria di classi

  1. Scegliere Nuovo dal menu File, quindi fare clic su Progetto.

  2. Nel riquadro Tipi progetto in Visual C++ selezionare CLR.

  3. Nel riquadro Modelli selezionare Applicazione console CLR.

  4. Nella casella Nome digitare il nome per il progetto, ad esempio MyExecRefsAssembly. Nell'elenco accanto a Soluzione, selezionare Aggiungi a soluzione per aggiungere il nuovo progetto alla soluzione contenente la libreria di classi.

  5. Scegliere OK per creare il progetto.

  6. Disabilitare l'intestazione precompilata per il progetto MyExecRefsAssembly selezionandolo in Esplora soluzioni, quindi fare clic su Proprietà dal menu Progetto. Espandere il nodo Proprietà di configurazione e il nodo C/C++, quindi scegliere Intestazioni precompilate. Nell'elenco accanto a Crea/Usa intestazione precompilata selezionare Senza intestazioni precompilate. Scegliere OK per salvare le modifiche.

Per utilizzare la funzionalità della libreria di classi nell'applicazione console

  1. Una volta creata un'applicazione console CLR, con la procedura guidata verrà generato un programma mediante il quale verrà visualizzato il messaggio "Hello World" sulla console. Il file di intestazione generato avrà lo stesso nome dato al progetto al momento della creazione. In questo esempio il file è denominato MyExecRefsAssembly.cpp.

  2. Per utilizzare le routine matematiche create nella libreria di classi, è necessario fare riferimento a essa A tale scopo, in Esplora soluzioni selezionare il progetto MyExecRefsAssembly, quindi fare clic su Proprietà dal menu Progetto. Nella finestra di dialogo Pagine delle proprietà espandere il nodo Proprietà comuni, selezionare Framework e riferimenti, quindi fare clic su Aggiungi nuovo riferimento. Per ulteriori informazioni, vedere Framework e riferimenti, Proprietà comuni, finestra di dialogo Pagine delle proprietà di <nomeprogetto>.

  3. La finestra di dialogo Aggiungi riferimento contiene l'elenco di tutte le librerie a cui è possibile fare riferimento. Nella scheda .NET sono elencate le librerie fornite con .NET Framework. Nella scheda COM sono elencati tutti i componenti COM disponibili nel computer. Nella scheda Progetto sono elencati tutti i progetti nella soluzione corrente e le eventuali librerie che contengono. Nella scheda Progetti selezionare MathFuncsAssembly, quindi scegliere OK.

    Nota

    È possibile fare riferimento a un assembly direttamente dal file di origine includendo la direttiva #using, ad esempio #using <MathFuncsAssembly.dll>. Per ulteriori informazioni, vedere #using Directive (C/C++).

  4. È ora possibile utilizzare la classe MyMathFuncs nell'applicazione. Sostituire il contenuto della funzione del file in MyExecRefsAssembly.cpp utilizzando il codice seguente.

    // MyExecRefsAssembly.cpp
    // compile with: /clr /FUMathFuncsAssembly.dll
    
    using namespace System;
    
    int main(array<System::String ^> ^args)
    {
        double a = 7.4;
        int b = 99;
    
        Console::WriteLine("a + b = {0}",
            MathFuncs::MyMathFuncs::Add(a, b));
        Console::WriteLine("a - b = {0}",
            MathFuncs::MyMathFuncs::Subtract(a, b));
        Console::WriteLine("a * b = {0}",
            MathFuncs::MyMathFuncs::Multiply(a, b));
        Console::WriteLine("a / b = {0}",
            MathFuncs::MyMathFuncs::Divide(a, b));
    
        return 0;
    }
    
  5. Compilare il file eseguibile scegliendo Compila soluzione dal menu Compila.

Per eseguire l'applicazione

  1. Verificare che MyExecRefsAssembly venga selezionato come progetto predefinito selezionando MyExecRefsAssembly in Esplora soluzioni, quindi fare clic su Imposta come progetto di avvio dal menu Progetto.

  2. Per eseguire il progetto fare clic su Avvia senza eseguire debug dal menu Debug. È necessario che l'aspetto dell'output sia simile all'esempio seguente.

    a + b = 106.4
    a - b = -91.6
    a * b = 732.6
    a / b = 0.0747474747474748
    

Passaggi successivi

Precedente: Procedura dettagliata: creazione e utilizzo di una libreria statica (C++). Successivo: Approfondimenti successivi (C++).

Vedere anche

Attività

Presentazione guidata di Visual C++