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 :

Tube en C++ (Windows)


Sujet :

C++

  1. #1
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut Tube en C++ (Windows)
    Bonjour, j'ai deux application qui doivent s'échanger des données l'une tourne en C# et l'autre en C++ native.

    Mon choix c'est porté vers les pipes, qu'en pensez vous??

    Auriez vous un exemple de fonctionnement de pipe en C++ natif car je ne trouve rien sous Windows, pas mal d'exemple Linux (c'est d'ailleurs sous Linux que j'ai connu les pipes).

    J'ai le handle du pipe créé en C#, je voudrais donc écouter ce handle sur le programme c++.

    Merci d'avance

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    L'API Microsoft de gestion des pipes est ici : http://msdn.microsoft.com/en-us/libr...(v=VS.85).aspx
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    merci pour la réponse, j'étais justement en train d'éplucher le MSDN mais je n'arrive pour le moment pas à recevoir les données envoyer par mon programme C++. J'arrive à faire un début de connexion, c'est déjà ca !!


    Tu ne m'as pas dis ce que tu pensais du fait d'utiliser les pipes. Bonne solution?? Moyenne?? Pas le choix ??

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par jmjmjm Voir le message
    Tu ne m'as pas dis ce que tu pensais du fait d'utiliser les pipes. Bonne solution?? Moyenne?? Pas le choix ??
    Je n'en pense rien, ni bon, ni mauvais. C'est un moyen de communication interprocess comme un autre. Naturellement, je serais parti vers un socket mais un pipe c'est bon aussi.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Comme le dit Ram, il y a plusieurs solutions pour faire communiquer différents processus. Toute une rubrique est présentée dans Interprocess Communication du MSDN.
    Cependant, lors de l'échange de données, il faut faire attention au format d'échange entre les 2 langages (problème de représentation, d'alignements, d'endian etc.). La réponse dépend peut être de la façon dont tu sérialises tes données en C++ et en C#.

  6. #6
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    Merci pour la réponse, pour le moment j'essaye juste d'envoyer une chaine string mais ca passe pas. Je galère vraiment. Les exemple MSDN ne sont pas compatible :
    - le client du C++ fonctionne avec le serveur C++ (normal)
    - le client c# fonctionne avec le serveur c# (normal)

    mais je n'arrive pas à faire marcher un client c++ avec un serveur c#.

    Je ne trouve pas d'exemple sur le net de cas comme ca.

    Quelles sont les autres solutions que tubes nommés (Socket, partage par fichier (pas top))

    Merci

  7. #7
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Shared memory, sinon. Mais si ta communication est à sens unique, un pipe c'est très bien. Je pense que le problème vient effectivement de la sérialisation des données : si tu dumpes tes structures de manière brute depuis le code c++ (ou les sérialise d'un moyen quelconque), il faut en revanche passer par le marshaller et interop pour les lire depuis le C#.

    Je soupçonne les classes de gestion de pipe de .net de s'occupper elle même de la (dé)sérialisation et de le faire de manière différente de ton programme c++.

  8. #8
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    Ta réponse m'interpelle. Car moi j'utilise le pipe dans les deux sens tu peux le déclarer en in, out ou inout. Quesque shared memory?? Trouverais je des exemples facilement pour communiquer de c++ a c#. Désole dete poser cette question mais je suis dans le train et je ne peux pas facillement chercher sur Google.


    Merci

  9. #9
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    shared memory, c'est de la mémoire partagée.

    C'est un autre procédé de communication interprocess qui permet d'échanger des données. Ceci dit, c'est plutôt prévu pour échanger une structure de données plutôt qu'une file de messages (ou alors, il va falloir faire tout le mécanisme de gestion de file de messages pour transformer et adapter ta mémoire partagée en une file de messages).
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  10. #10
    En attente de confirmation mail

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    Si je me trompe pas un shared memory est comme son nom l'indique une zone mémoire partagé par différent processus, il convient donc de prendre les précautions utiles en programmation MT, pour ce genre de mémoire il doit y avoir des memory barriers qui permettent de locker la zone pendant un certain temps. (mais je sais pas si il y a quelque chose de portable à ce sujet, je croit pas)

  11. #11
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Citation Envoyé par Flob90 Voir le message
    Si je me trompe pas un shared memory est comme son nom l'indique une zone mémoire partagé par différent processus, il convient donc de prendre les précautions utiles en programmation MT, pour ce genre de mémoire il doit y avoir des memory barriers qui permettent de locker la zone pendant un certain temps. (mais je sais pas si il y a quelque chose de portable à ce sujet, je croit pas)
    Dans mon souvenir, le shared memory win32 s'appuie sur les file mapping. Les memory barrier n'apparaissent qu'avec vista il me semble.

  12. #12
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Citation Envoyé par jmjmjm Voir le message
    Ta réponse m'interpelle. Car moi j'utilise le pipe dans les deux sens tu peux le déclarer en in, out ou inout. Quesque shared memory?? Trouverais je des exemples facilement pour communiquer de c++ a c#. Désole dete poser cette question mais je suis dans le train et je ne peux pas facillement chercher sur Google.
    J'étais persuadé que les pipes étaient à sens unique, au temps pour moi, donc.

    Sinon, il te faut un named pipe pour la communication, parce que pour passer le handle, il te faut communiquer, et que du coup on se mort la queue .

  13. #13
    En attente de confirmation mail

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Salut,

    Dans mon souvenir, le shared memory win32 s'appuie sur les file mapping. Les memory barrier n'apparaissent qu'avec vista il me semble.
    Merci pour l'info. Je me suis jamais penché sur le sujet, juste Alexandrescu qui en parle dans certains articles (sur le singleton et le developpement lock-free) comme une solutions plus fiables que les mutex (pour palier au problème du DCLP en particulier) mais il ne présente pas de code (rien de portable ni de standard).

  14. #14
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    Merci à tous, j'ai donc choisi et retenu la solution utilisant les named pipe, cela fonctionne très bien après pas mal de recherche, je dois par exemple transformer mes strings c# afin que le C++ puisse les lire à l'autre extrémité et vis versa. je vous parle même pas des foncions de fou que j'ai faite pour sérialiser / dé-sérialiser un objet mais maintenant que tout fonctionne ca me va..



    A bientôt

  15. #15
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Citation Envoyé par jmjmjm Voir le message
    je vous parle même pas des foncions de fou que j'ai faite pour sérialiser / dé-sérialiser un objet
    Et si tu nous en parlais pour qu'on sache à quoi cela ressemble
    Peux-tu poster un exemple ou deux de fonction de sérialisation/désérialisation dans les 2 langages au cas où on serait confronté au même problème ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Windows]accès base de registre windows
    Par Greg01 dans le forum API standards et tierces
    Réponses: 27
    Dernier message: 05/06/2007, 16h14
  2. Documentation gratuite sur l'API Windows, COM, DCOM, OLE, etc.
    Par Community Management dans le forum Windows
    Réponses: 1
    Dernier message: 16/11/2006, 16h28
  3. Programme de boot qui passe la main à Windows
    Par Bob dans le forum Assembleur
    Réponses: 7
    Dernier message: 25/11/2002, 04h08
  4. OmniORB : code sous Windows et Linux
    Par debug dans le forum CORBA
    Réponses: 2
    Dernier message: 30/04/2002, 18h45
  5. Quel désassembleur/assembleur pour un exe Windows ?
    Par Anonymous dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 17/04/2002, 11h59

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