My Blog

Utilizzare assembly .NET in C++

by lupok on venerdì 23 novembre 2012 10:12
Per prima cosa creiamo una nuova soluzione vuota con Visual Studio:



Poi aggiungiamo un progetto Win32 Console Application, tasto destro sulla Solution quindi Add->New Project e selezionare Win32 Console Application:



All'apertuta del Wizard che permette di configurazione del progetto C++, click su "Finish" per confermare le opzioni predefinite.

Ora aggiungiamo un nuovo progetto .NET di tipo Class Library:



Nel nuovo progetto Class Library è presente la classe Class1 entro la quale aggiungiamo un metodo che poi andremo ad utilizzare nel progetto C++ (il metodo svolgerà un'operazione banale in quanto scopo di questo esempio è mostrare l'interoperabilità tra C++ e .NET).

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CLRLibrary
{
    public class Class1
    {

       public void SaveList(List numbers, String path)
       {
          using (System.IO.StreamWriter sw = new System.IO.StreamWriter(path))
          {
             numbers.ForEach(n => {
                sw.WriteLine(String.Format("Number: {0}", n));
             });

             sw.Close();
          }
       }
    }
}



Come si vede dal codice riportato sopra il metodo accetta in ingresso una lista di interi e li salva sul file specificato dal parametro "path".


A questo punto dobbiamo importare l'assembly .NET che contiene la classe "Class1" nel progetto C++ per poterlo utilizzare, quindi trasto destro sul progetto C++ e selezionare "References...":



Click su "Add New Reference..." e spuntiamo il progetto .NET che abbiamo creato un precedenza:



Infine per poter utilizzare classi .NET è necessario abilitare il supporto CLR per il progetto C++, quindi tasto destro sul progetto C++ selezioniamo Properties e nel menu a lista "Common Language Runtime Support" selezioniamo "Common Language Runtime Support /clr":



Ora è possibile scrivere codice .NET nel progetto C++, in particolare utilizzeremo la classe Class1 per salvare su file una lista di numeri:

// C++Application.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

using namespace System;
using namespace System::Collections::Generic;

int _tmain(int argc, _TCHAR* argv[])
{
   List^ numbers = gcnew List(gcnew cli::array { 1, 2, 3 });

   CLRLibrary::Class1^ class1 = gcnew CLRLibrary::Class1();

   class1->SaveList(numbers, "c:\temp\numbers.txt");

   return 0;
}


Eseguendo il progetto C++ sarà generato il seguente file:



Per abilitare il debug del codice .NET dal progetto C++ è necessario impostare la proprietà "Debugger Type" presente nello opzioni di progetto a "Mixed":


Blogs Parent Separator My Blog
Author
lupok

My Blog

Tags