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 :

communiquer avec une application c++


Sujet :

C#

  1. #1
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut communiquer avec une application c++
    Bonjour,

    J'aimerais créer une sorte de chat entre une application c# et une application c++. C'est à dire que je dois pouvoir appeler une fonction c# depuis mon programme c++ et vis versa.
    Je pense qu'il faut que j'utilise l'interop et du early binding mais je ne suis plus très familier avec ces concepts car je n'y ai pas touché depuis un moment.
    Pourriez vous me donner un bref exemple du code c++ et c# à utiliser?
    Je ne savais pas trop dans quelle section du forum poser cette question. J'ai finalement choisi de poster la question ici pensant que plus de développeurs c# connaissent le c++ que l'inverse. Merci de déplacer mon sujet si une section est plus appropriée.

    merci d'avance

  2. #2
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 55
    Points : 49
    Points
    49
    Par défaut
    Hello,

    Peut-être ceci ?

    @+

  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
    Points : 5 194
    Points
    5 194
    Par défaut
    salut

    et le rapport entre la choucroute et la mayonnaise ?

    Faire un chat n'implique AUCUNEMENT ce que tu insinues dans ton post: à savoir l'appel d'une fonction C++ en C# et l'appel d'une fonction C# en C++...

    L'architecture de base d'un chat s'appuie sur le réseau pour faire communiquer X application. Le réseau, c'est va veux dire : Socket (TCP ou UDP), donc, en aucun cas la notion mentionnée (appel C++, C#) n'intervient...

    Si la question maintenant est "Comment appeler du C++ depuis C#" ou bien "Comment utiliser du code C# depuis du code C++", on pourra te répondre.. mais là, ta question n'est pas suffisamment précise et exacte pour que je puisse te donner autre chose que cela comme réponse.

  4. #4
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut
    merci pour vos réponses.

    Il s'agit vraiment d'appeler du code c++ depuis du c# et vis versa.
    J'explique un peu mon projet:
    J'ai une application c++ qui, elle, est un vrai chat. Elle reçoit et envois des messages par internet.
    Cette application possèdes des méthodes sendmessage() et getmessage().
    Je voudrais maintenant créer une application c# qui serve d'interface à l'utilisateur. En fait l'utilisateur n'accèderait pas directement à l'application c++ mais à l'application c#. Mais comme ces 2 applications sont sur la même machine, il n'y a pas de communication par le réseau.
    • Quand l'application c++ reçoit un message, elle doit donc appeler une méthode de l'application c# pour que celle-ci l'affiche.
    • Quand on envois un message depuis l'application c#, il faut en fait appeler la méthode sendmessage() de l'application c++.

    Finalement, l'application c++ ne sert que de relais.

    J'espère que c'est plus clair.

  5. #5
    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
    Points : 5 194
    Points
    5 194
    Par défaut
    tu peux très bien faire du réseau en local...

    avec les sockets (TCP, UDP, RPC ou IPC je ne sais plus le terme exacte)...

    Sinon, tu peux toujours faire un Api WIN32 SendMessage() entre les 2 applications ou bien utiliser MSMQ pour envoyer des messages d'une application vers l'autre.

    Si tu veux garder 2 executables (1 C# et l'autre C++), c'est la solution la plus facile, rapide et simple à mettre en oeuvre !!!

    Sinon, avec une DLL C++, tu fais un wrapper en C++/CLI en exposant une méthode SendMessage() dans ta classe C++/CLI et en exposant un event "OnMEssageReceive" auquel s'abonnera la classe C# possédant le wrapper C++/CLI...

    Je pense que tu as toutes les solutions possibles en main

  6. #6
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut
    Citation Envoyé par theMonz31 Voir le message
    Sinon, tu peux toujours faire un Api WIN32 SendMessage() entre les 2 applications ou bien utiliser MSMQ pour envoyer des messages d'une application vers l'autre.

    Si tu veux garder 2 executables (1 C# et l'autre C++), c'est la solution la plus facile, rapide et simple à mettre en oeuvre !!!
    La solution la plus simple et rapide à mettre en place me plait... mais je ne connais aucune des 2 solutions que tu proposes.
    Pour MSMQ je peux assez facilement trouver des infos mais c'est plus difficile pour l'Api WIN32.
    Pourrais-tu m'expliquer en quoi consiste ces méthodes et quels sont les intérêts de chacune?

    merci

  7. #7
    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
    Points : 5 194
    Points
    5 194
    Par défaut
    le SendMessage de l'api Win32 te permet d'envoyer un message à une application (dont il faut avoir le Handle HWnd)...

    Tu trouveras sur le net plein d'exemple en C# et en C++ sans difficultés aucune.

    En C#, il suffit de surcharger WndProc pour recevoir les messages.

    Google ceci "C# SendMessage" et ton bonheur tu trouveras

  8. #8
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut
    merci et désolé de répondre si tard.

    En fait SendMessage () est effectivement simple d'utilisation mais ne correspond pas à ce que je veux. Je veux vraiment appeler mes fonction c++ et c# et non pas envoyer des message via l'interface utilisateur. Je veux travailler à un niveau plus bas... mais je ne sais pas comment faire pour appeler du code C# depuis du c++ (l'inverse est facile et largement documenté).

  9. #9
    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
    Points : 5 194
    Points
    5 194
    Par défaut
    tu veux appeler du code C# depuis C++, soit... mais tu veux que l'appel de la fonction te retourne une valeur ?

    Tu peux très bien faire un SendMessage et sur réception de ce message coté C#, déclencher une action.. Au final, cela aura le même effet...

    Sinon, si en C++, tu veux appeler du code C#, faut regarder du coté, par exemple... ici :

    http://msdn.microsoft.com/en-us/magazine/cc163867.aspx

  10. #10
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut
    Citation Envoyé par theMonz31 Voir le message
    tu veux appeler du code C# depuis C++, soit... mais tu veux que l'appel de la fonction te retourne une valeur ?
    Non pas besoin de retourner un valeur.

    Citation Envoyé par theMonz31 Voir le message
    Tu peux très bien faire un SendMessage et sur réception de ce message coté C#, déclencher une action.. Au final, cela aura le même effet...
    Il me semble que le SendMessage travail sur la couche UI... alors que je veux faire directement des appels de fonction dans les couches "business".


    Citation Envoyé par theMonz31 Voir le message
    Sinon, si en C++, tu veux appeler du code C#, faut regarder du coté, par exemple... ici :

    http://msdn.microsoft.com/en-us/magazine/cc163867.aspx
    Il me semble que l'article n'explique pas comment appeler les fonctions c# même si la dernière question traite effectivement du sujet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void DoSomethingWithDotNET(...) {
       // call framework classes here
       // safe from managed functions
    }
    L'auteur dit que l'on peut ici appeler des classes du framework mais sans expliquer comment on le fait.


    Sinon, j'ai regardé du côté de MSMQ. J'ai écris le bout de code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	CMSMQApiWrapper ob;
    	//Create The Public Queue if it does not Exist
    	ob.CreatePublicQueue(_T("InboundRequests"),_T("InboundRequests"));
    	ob.SendStringMessage(_T("InboundRequests"),_T("test"),"ceci est un test");
     
    	CString szLabel, szMessage;
    	ob.ReadStringMessage(_T("InboundRequests"),szLabel,szMessage);
     
    	char * lbl = (char *)(LPCTSTR)szLabel;
    	char * msg = (char *)(LPCTSTR)szMessage;
     
    	printf(lbl);
    	printf(msg);
    En gros j'essaie de créer une queue, de rentrer un message dedans, de le récupérer et de l'afficher. J'utilise une classe helper que j'ai trouvée ici:
    http://www.codeproject.com/KB/winsdk/msmq.aspx

    Les méthodes SendStringMessage() et ReadStringMessage() essaient dans un premier temps de localiser la queue mais elles échouent sur cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IMSMQQueryPtr query("MSMQ.MSMQQuery");
    Saurais-tu pourquoi la classe ne peut pas être crée?

  11. #11
    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
    Points : 5 194
    Points
    5 194
    Par défaut
    Non, je ne sais pas.

    Mais as tu activer le service MSMQ sur ton ordinateur ?

Discussions similaires

  1. Communiquer avec une application Java
    Par valdano dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 27/05/2013, 10h42
  2. Communiquer avec une application cliente
    Par Invité dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 01/06/2011, 16h27
  3. Communiquer avec une application en arrière plan
    Par ZMJUVENTINO dans le forum Général Java
    Réponses: 4
    Dernier message: 11/02/2009, 14h39
  4. Communiquer avec une application
    Par ZMJUVENTINO dans le forum Général Java
    Réponses: 3
    Dernier message: 28/01/2009, 00h40
  5. Créer un service Web et communiquer avec une application lourde
    Par fabseven dans le forum Ruby on Rails
    Réponses: 5
    Dernier message: 10/03/2008, 20h22

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