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 :

[IPC] string & struct


Sujet :

C++

  1. #1
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut [IPC] string & struct
    hello à tous,

    J'aimerais par l'intermedaire d une structure passer une string d une Application à une autre. Je serialise la structure de manière tres simple pour l envoyer sur plusieur type de canaux par la suite...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct
    {
    	std::string sFileName;
    	unsigned short usTransferID;
     
    }FileTransferRequest;
    mais comment faire que la taille de la string soit connu par l application receptrice ?

  2. #2
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    Tu peux connaître la taille de la chaîne avec string::length ou string::size.
    Mais ça sert à quoi de connaître sa taille?

  3. #3
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut
    Citation Envoyé par MatRem
    Tu peux connaître la taille de la chaîne avec string::length ou string::size.
    Mais ça sert à quoi de connaître sa taille?
    ben comment tu serialises une std::string ?

  4. #4
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    Ben tu as de nombreuses façon de sérializer une string...
    Mais avec les IPC (enfin ça dépend lesquelles), ils me semblent que tu peux récupérer directement ta structure telle quelle non?

  5. #5
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut
    alors si je remplis la structure dans l app 1 et que je l envoie à la 2 ( qui elle meme connait le type de la structure), cette dernière arriveras toujours à avoir la bonne taille ???

    Ce que je veux dire c est que le type string n'as pas forcement la meme taille a chaque envoie et je vois pas comment l application qui va refomer la structure le saura...

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    sinon en C++ on déclare une structure comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct FileTransferRequest
    {
    	std::string sFileName;
    	unsigned short usTransferID;
    };

  7. #7
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    Ce que je veux dire c est que le type string n'as pas forcement la meme taille a chaque envoie et je vois pas comment l application qui va refomer la structure le saura...
    En général tu envois aussi la taille du message que tu envois. Cependant si tu envois deux string, dans une structure, je me demande effectivement comment l'application "distante" reconstruit la structure.

    Tu utilises quoi comme IPC?

  8. #8
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut
    Citation Envoyé par MatRem
    je me demande effectivement comment l'application "distante" reconstruit la structure.
    c est exactement le but de ce post...

    Citation Envoyé par MatRem
    Tu utilises quoi comme IPC?
    Anonymous Pipe

  9. #9
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    Ok.
    En fait le problème vient du fait que quand tu alloues une string, elle même alloue de la mémoire pour stocker ses caractères. Elle n'est pas contenu dans un bloc continu de mémoire.
    Donc si tu envoies, via les pipes, une string, je penses que ça ne va pas envoyer le contenu de la chaine.

    Ne pourrais tu pas plutôt envoyé une char *, dont l'avantage est de ne pas être fragmenté en mémoire.

  10. #10
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut
    oui je pourrais tres bien envoyer un unsigned int puis un char * à l 'ancienne mais je voulais faire ca un peu mieux...

  11. #11
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Tu peux envoyer les caractères pointés par le char* obtenu par string::c_str().

    Ensuite, tu dois choisir le format selon ce qui est le plus pratique pour reconstuire: Envoyer la taille ou se contenter d'arrêter la string avec le caractère nul.
    Je conseille d'envoyer la taille en premier, c'est toujours mieux de connaître la taille à l'avance.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    Oui je pourrais tres bien envoyer un unsigned int puis un char * à l 'ancienne mais je voulais faire ca un peu mieux...
    Tu peux utiliser les strings dans ton programme comme structure de données, mais au moment ou tu écriras/liras dans le tube, je pense qu'il faudra passer par du char *.

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

Discussions similaires

  1. mettre les termes d'un string dans une struct
    Par grand's dans le forum SL & STL
    Réponses: 17
    Dernier message: 29/11/2004, 17h43
  2. éliminer un caractere d'un string
    Par no-vice dans le forum Langage
    Réponses: 5
    Dernier message: 09/08/2002, 14h55
  3. URGENT: retour de string
    Par Pinggui dans le forum CORBA
    Réponses: 4
    Dernier message: 15/07/2002, 09h47
  4. Réponses: 2
    Dernier message: 05/06/2002, 12h29
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

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