Creazione e utilizzo di un assembly gestito (C++)

Aggiornamento: novembre 2007

Il prossimo tipo di libreria da creare è un assembly gestito. L'utilizzo di assembly gestiti è un ottimo modo per riutilizzare il codice. Anziché implementare le stesse routine in tutti i programmi creati, è possibile scriverle una sola volta e fare riferimento a esse da applicazioni che ne richiedono le funzionalità.

Questa procedura dettagliata include:

  • Creazione di un nuovo 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 console.

  • Esecuzione dell'applicazione.

Prerequisiti

In questo argomento si presuppone la conoscenza delle nozioni di base del linguaggio C++. Chi sta iniziando ad apprendere le prime nozioni di C++ troverà particolarmente utile il testo "C++ Beginner's Guide" scritto da Herb Schildt, disponibile in linea all'indirizzo https://go.microsoft.com/fwlink/?LinkId=115303 (informazioni in lingua inglese).

Per creare un nuovo progetto Libreria di classi

  1. Scegliere Nuovo dal menu File e quindi Progetto....

  2. Nel riquadro Tipi progetto fare clic sul nodo Visual C++, quindi selezionare CLR. Verrà creato un progetto che ha come destinazione Common Language Runtime.

  3. Nel riquadro Modelli selezionare Libreria di classi.

  4. Scegliere un nome per il progetto, ad esempio MathFuncsAssembly, e immetterlo nel campo Nome. Scegliere un nome per la soluzione, ad esempio ManagedAssemblies, e immetterlo nel campo Nome soluzione.

  5. Scegliere OK per creare il progetto.

  6. Per impostazione predefinita, i nuovi progetti vengono creati con l'impostazione che prevede l'utilizzo delle intestazioni precompilate. Per disattivare l'intestazione precompilata, scegliere Proprietà dal menu Progetto. Espandere il nodo Proprietà di configurazione e il nodo C/C++, quindi scegliere Intestazioni precompilate. Dall'elenco a discesa accanto a Crea/Usa intestazione precompilata selezionare Senza intestazioni precompilate. Scegliere OK per salvare le modifiche. Per ulteriori informazioni sulle intestazioni precompilate, vedere Creazione di file di intestazione precompilati:

Per aggiungere una classe alla libreria di classi

  1. Dopo la creazione di una nuova libreria di classi CLR, verrà automaticamente creata una classe semplice. I nomi per il file di intestazione e il file di origine saranno uguali al nome scelto in precedenza per il progetto. In questo esempio, i file sono denominati MathFuncsAssembly.h e MathFuncsAssembly.cpp.

  2. Sostituire il codice esistente in MathFuncsAssembly.h con una classe semplice denominata MyMathFuncsAssembly per eseguire operazioni matematiche comuni, ad esempio addizione, sottrazione, moltiplicazione e divisione. Il codice dovrebbe essere analogo al 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. Il codice dovrebbe essere analogo al 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 Genera soluzione dal menu Genera. Verrà creata una DLL (Dynamic Link Library) utilizzabile da altri programmi. Per ulteriori informazioni sulle DLL, vedere DLL.

Per creare un'applicazione che fa riferimento alla libreria di classi

  1. Per creare un'applicazione che farà riferimento e utilizzerà la libreria di classi appena creata, scegliere Nuovo dal menu File e quindi Progetto….

  2. Nel riquadro Tipi progetto fare clic sul nodo Visual C++, quindi selezionare CLR. Verrà creato un progetto che ha come destinazione Common Language Runtime.

  3. Nel riquadro Modelli selezionare Applicazione console CLR.

  4. Scegliere un nome per il progetto, ad esempio MyExecRefsAssembly, e immetterlo nel campo Nome. Accanto a Soluzione selezionare Aggiungi a soluzione dall'elenco a discesa. Il nuovo progetto verrà aggiunto alla stessa soluzione della libreria di classi.

  5. Scegliere OK per creare il progetto.

  6. Per impostazione predefinita, i nuovi progetti vengono creati con l'impostazione che prevede l'utilizzo delle intestazioni precompilate. Per disattivare l'intestazione precompilata, scegliere Proprietà dal menu Progetto. Espandere il nodo Proprietà di configurazione e il nodo C/C++, quindi scegliere Intestazioni precompilate. Dall'elenco a discesa accanto a Crea/Usa intestazione precompilata selezionare Senza intestazioni precompilate. Scegliere OK per salvare le modifiche. Per ulteriori informazioni sulle intestazioni precompilate, vedere Creazione di file di intestazione precompilati:

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

  1. Dopo la creazione di una nuova applicazione console CLR, verrà creato un programma mediante il quale verrà visualizzato il messaggio "Hello World" sulla console. Il nome del file di origine sarà uguale al nome scelto in precedenza per il progetto. In questo esempio il file è denominato MyExecRefsAssembly.cpp.

  2. Per utilizzare le routine matematiche create nella libreria di classi, è necessario fare riferimento a essa scegliendo Riferimenti... dal menu Progetto. Nella finestra di dialogo Pagine delle proprietà, espandere il nodo Proprietà comuni, selezionare Riferimentie quindi selezionare il pulsante Aggiungi nuovo riferimento…. Per ulteriori informazioni sulla finestra di dialogo Riferimenti…, vedere Framework e riferimenti, Proprietà comuni, finestra di dialogo Pagine delle proprietà di <nomeprogetto>.

  3. Verrà visualizzata la finestra di dialogo Aggiungi riferimento nella quale sono elencate 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. Per ulteriori informazioni sulla finestra di dialogo Aggiungi riferimento, vedere Finestra di dialogo Aggiungi riferimento.

    Nota:

    È possibile fare riferimento a un assembly direttamente dal file di origine includendo la direttiva #using, come in #using <MathFuncsAssembly.dll>. Per ulteriori informazioni sulla direttiva, vedere The #using Directive.

  4. È ora possibile utilizzare la classe MyMathFuncs nell'applicazione. Sostituire il contenuto della funzione del file in MyExecRefsAssembly.cpp con 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 l'eseguibile scegliendo Compila soluzione dal menu Compila.

Per eseguire l'applicazione

  1. Assicurarsi che MyExecRefsAssembly sia selezionato come progetto predefinito. In Esplora soluzioni selezionare MyExecRefsAssembly e scegliere Imposta come progetto di avvio dal menu Progetto.

  2. Per eseguire il progetto, scegliere Avvia senza eseguire debug dal menu Debug. Il codice sarà analogo al seguente:

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

Passaggi successivi

Precedente:Creazione e utilizzo di una libreria statica (C++) | Successivo:Approfondimenti successivi (C++)

Vedere anche

Attività

Presentazione guidata di Visual C++

Altre risorse

Assembly in Common Language Runtime

Domini applicazione