none
C++ tip – Appeler un objet .NET dans une application C++ Win32 RRS feed

  • Discussion générale

  • Pour utiliser un objet .NET dans une application non managée C++ Win32, nous devons créer tout d’abord une interface COM. Voici les étapes :  

     

    Création du projet .NET :

     

    Démarrez Visual Studio en tant qu’administrateur, créez un nouveau projet de type « Class Library ». Choisissez le nom de ce nouveau projet : MonCOMdotNET. Ajoutez une interface IMonCOM  et une méthode dans cette interface :

    namespace MonCOMdotNET

    {

        public interface IMonCOM

        {

            void AccessFichier(string mystr);  

        }

    }

     

    Modifiez le code pour faire la classe par défaut de ce projet implémenter l’interface de façon explicite. Il faut aussi créer un constructeur explicite vide pour cette classe et mentionner que la méthode est visible pour COM :

     

    namespace MonCOMdotNET

    {

        public class Class1: IMonCOM

        {

            [System.Runtime.InteropServices.ComVisible(true)]   

            void IMonCOM.AccessFichier(string mystr)

            {

                System.IO.StreamWriter sw = new System.IO.StreamWriter(@"c:\alex\programming\FichierParCOM.txt");

                sw.WriteLine("operation Delta-COM :D");

                sw.WriteLine(mystr);

                sw.Close();

            }

        }

    }

     

     

    Dans les propriétés du projet, dans l’onglet « Build », cochez la case « Registrer for COM interop » :

     

    Maintenant, nous devons créer un « strong name » pour cette classe, en utilisant l’outil sn.exe. Démarrez en tant qu’administrateur  « Visual Studio Command Prompt » et modifiez le chemin pour aboutir dans le répertoire bin/debug de votre application, ou l’assembly est généré. Dans ce répertoire, exécutez cette commande dans la console :

    sn –k KeyCOM.SNK

     

    Vous pouvez vérifier que le fichier KeyCOM.SNK a été généré dans le répertoire bin/debug.

     

    Dans le fichier AssemblyInfo.cs modifiez le contenu en ajoutant ces lignes de code :

    [assembly: ComVisible(true)]

    [assembly: AssemblyDelaySign(false)]

     

    Dans les propriétés du projet, sur l’onglet « Signing », cochez la case « Sign the assembly » et choisissez le fichier SNK généré :

     

     

     

    Maintenant nous pouvons compiler la solution et enregistrer l’assembly, avec la commande « regasm » dans la console de commande  de Visual Studio :

    regasm MonCOMdotNET.dll /tlb :MonCOMdotNET.tlb /codebase

     

     

    Création du projet C++ Win32 :

     

    Ajoutez un nouveau projet de type C++ Win32 Console Application à cette solution. Dans les propriétés de ce projet, cherchez Configuration Properties -> General -> Common Language Runtime Support et choisissez la valeur « Common Language Runtime Support (/clr) ».

     

    Dans  le fichier principale de l’application C++, nous allons ajouter une directive #import, avec le chemin vers le fichier .tlb :

    #import "C:\Users\<nom_utilisateur>\Documents\Visual Studio 2010\Projects\MonCOMdotNET\MonCOMdotNET\bin\Debug\MonCOMdotNET.tlb"

    using namespace MonCOMdotNET ;

     

     

    Pour appeler l’objet  Class1 et sa méthode AccessFichier, nous utilisons le code suivant dans la methode Main du projet C++ Win32:

    HRESULT hr = CoInitialize(NULL);

     

           IMonCOMPtr pIMonCOM(__uuidof(Class1));

           pIMonCOM->AccessFichier(".NET COM string ... ");

           CoUninitialize();

     

     

    Une dernière chose à faire est de vérifier si le projet C++ est le projet principal de la solution. Choisissez « Set as Startup Project » dans le menu contextuel de ce projet, et ensuite démarrez l’application. Le résultat de cette application devrait être un fichier « FichierParCOM.txt » qui a été créé par le composant COM MonCOMdotNET, appelé par l’application Win32.

     

    Vous pouvez télécharger la solution de ce tutoriel, pour Visual Studio 2010.

     

    Pour plusieurs questions sur la bibliotheque de classes .NET, visitez Foire aux Questions - Didacticiels et ressources .NET Framework


     

     

     


    Suivez MSDN sur Twitter 

    lundi 1 novembre 2010 15:18