IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Compilation classe COM - interoperablité C++


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut Compilation classe COM - interoperablité C++
    Bonjour,

    J'ai créé une dll en c# qui est censée pouvoir être utilisée par un exécutable écrit en c++ (non managé). D'après ce que j'ai pu lire sur le net il faut pour cela créer une classe COM en C#.

    Pour information voici le code de ma classe C# :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    using System;
    using System.Runtime.InteropServices;
     
    namespace COMCsharpServerVSProject
    {    
        [Guid("DBE0E8C4-1C61-41f3-B6A4-4E2F353D3D05")]
        public interface IManagedInterface
        {
            int PrintHi(string name);
        }
     
        [Guid("C6659361-1625-4746-931C-36014B146679")]
        public class InterfaceImplementation : IManagedInterface
        {
            public int PrintHi(string name)
            {
                Console.WriteLine("Hello, {0}!", name);
                return 33;
            }
        }
    }
    Je compile ma classe C# à l'aide des deux commandes suivantes :

    Csc /target :library COMCsharpServerVSProject.cs
    Regasm COMCsharpServerVSProject.dll /tlb :COMCsharpServerVSProject.tlb


    Une fois cette compilation effectuée je compile ensuite mon projet C++ avec cette commande (pas de problèmes, aucune erreur de compilation):
    cl comclient.cpp

    Ensuite je lance le fichier comclient.exe et tout fonctionne parfaitement ! ma dll C# est bien utilisé lors du lancement de comclient.exe !!!

    Mon petit problème est que je souhaiterais pouvoir compiler ma classe COMCsharpServerVSProject.cs à partir de visual studio (intégré à un projet) et non en ligne de commande...
    Pour tenter de faire cela j'ai créé un projet de type "bibliothèque de classes" et j'ai ensuite mis dans la classe exactement le même code que celui ci-dessus. Une fois compilé cela me crée bien ma dll. J'ai ensuite lancé la commande Regasm COMCsharpServerVSProject.dll /tlb :COMCsharpServerVSProject.tlb afin de creer mon fichier .tlb. Jusque là pas de problèmes... mais lorsque j'essaye de compiler mon projet c++ j'ai droit à de multiples erreurs dont voici le détail :

    D:\TESTS_DEVS\WIN32\COM\COMCsharpServerVSProject\COMCsharpServerVSProject\bin\De
    bug>cl comclient.cpp
    Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
    Copyright (C) Microsoft Corp 1984-1998. All rights reserved.

    comclient.cpp
    comclient.cpp(22) : error C2065: 'IManagedInterface' : undeclared identifier
    comclient.cpp(22) : error C2065: 'cpi' : undeclared identifier
    comclient.cpp(22) : error C2106: '=' : left operand must be l-value
    comclient.cpp(27) : error C2065: 'CLSID_InterfaceImplementation' : undeclared id
    entifier
    comclient.cpp(29) : error C2065: 'IID_IManagedInterface' : undeclared identifier

    comclient.cpp(46) : error C2227: left of '->PrintHi' must point to class/struct/
    union
    comclient.cpp(52) : error C2227: left of '->Release' must point to class/struct/
    union
    Il y a donc un problème, je pense que ma classe c# n'est pas compilée comme elle le devrait via visual studio... car la compilation de cette même classe en ligne de commande fonctionne parfaitement.... donc ma question est... comment effectuer le même type de compilation via visual studio 2005 ? quelles sont les éventuelles options à modifier pour arriver au même résultat que la commande Csc /target :library COMCsharpServerVSProject.cs ?

    Je précise que j'ai déjà essayé de modifier "inscrire poiur com interop" dans les propriétés de mon projet, sans résultat.

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    Je rajoute un petit élément... si je me fie à ce qu'il y a indiqué sur ce lien http://edndoc.esri.com/arcobjects/9....8d86f5e91e.htm (Type libraries for managed components) visual studio est censé créer automatiquement le tlb en cochant "inscrire pour com interop" hors ce n'est le cas ! il me créé juste la dll !

  3. #3
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    j'ai crée il y a quelques mois un sujet sur la création d'un objet Com (ActiveX) en C#... en mettant un lien vers codeplex.com ou se trouve des exemples provenant de microsoft et explicitant parfaitement comment faire.

    Et une fois, l'activeX crée, pas besoin de tlb...

    Pour info, j'ai réussi à insérer cet activeX C# dans une page Web (sous IE bien sur puisque que les autres navigateurs ne supportent plus COM)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    Ok, merci, je vais jeter un oeil.

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/03/2006, 09h10
  2. Réponses: 3
    Dernier message: 15/03/2006, 14h53
  3. Réponses: 3
    Dernier message: 02/10/2005, 12h30
  4. probleme compilation classe avec Borland c++ compiler 5.5
    Par softblue dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 17/06/2004, 15h16
  5. [Compilation] classe inexistante
    Par pacha1 dans le forum Général Java
    Réponses: 8
    Dernier message: 27/05/2004, 15h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo