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 :

Parcours d'une structure


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    81
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 81
    Par d�faut Parcours d'une structure
    Bonjour,

    Je travaille sur une biblioth�que de transfert de donn�es entre des machines qui n'ont pas le m�me format de codage bits (little endian vs big endian).
    L'inversion des bits est g�r�e pour des types "classiques" : entier 32 bits, 64 bits, float, double, ...

    Le probl�me se pose alors pour les structures telles que la suivante :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     typedef struct{
      long L1,L2,L3,L4; 
      float F1,F2;
      double D1,D2,D3; 
      char C1,C2;
      long L5;
    }DUMMY;
    L'id�e est de g�rer la d�tection des tailles des variables constituant la structure automatiquement afin de pouvoir r�utiliser les fonctions basiques �voqu�es ci-dessus. L'objectif est de fournir � l'utilisateur une fonction qui prend en param�tre la structure de donn�es et qui est capable d'en extraire les types.

    Est-il donc possible de balayer tous les champs d'une structure sans en conna�tre � l'avance les noms ? Une sorte de for each en fait.

    Merci.

  2. #2
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Non, il faudra au moins �crire une fonction qui permettra d'envoyer ta structure en envoyant chacun de ses membres un � un.
    C'est le m�me principe que les flux standards : les op�rateurs << et >> sont d�finis pour les types de base du langage, mais tu peux tr�s facilement �tendre ce comportement pour tes types persos en �crivant des op�rateurs << et >>.

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    81
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 81
    Par d�faut
    Salut,

    C'est justement ce que je ne veux pas faire. Le principe de la bilbioth�que est vraiment que l'�change des donn�es soit transparent pour l'utilisateur.
    Il a juste � cr�er sa structure, la mettre � jour et l'envoyer d'un bloc sur le r�seau.

    Le point bloquant pour l'instant est qu'il est n�cessaire d'inverser certains octets dont on ne connait ni le nombre ni l'ordre d'apparition. C'est donc l'utilisateur qui est responsable actuellement de fournir ces informations. Si je reprend la stucture DUMMY, cela donnerait quelque chose de ce type :
    32, 32, 32, 32, 32, 32, 64, 64, 64, 16, 32 o� le nombre correspond au nombre de bits successifs � inverser.

    Ce n'est pas un effort �norme � fournir mais c'est potentiellement une source de bugs en cas d'inattention, par exemple une modification de la structure qui ne serait pas r�percut�e sur la suite de nombre !
    C'est pour cela que je voudrais le faire de fa�on automatique.

    On m'avait parl� d'analyseur syntaxique type Yacc/Lex qui pourrait faire cela mais cela me semble disproportionn� vu ce qu'il y a � faire.

    Je pensais �galement � analyser une string qui contiendrait la d�finition de la structure :

    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
     typedef struct{
      long L1,L2,L3,L4; 
      float F1,F2;
      double D1,D2,D3; 
      char C1,C2;
      long L5;
    }DUMMY;
     
    char * str = "\
     typedef struct{\
      long L1,L2,L3,L4; \
      float F1,F2;\
      double D1,D2,D3; \
      char C1,C2;\
      long L5;\
    }DUMMY;";
    Le probl�me est que ce n'est pas forc�ment facile de g�rer tous les d�nominations de types qui font r�f�rence � des types de base, comme les types BYTE, DWORD, ... que l'on trouve sous Windows.

    Enfin, si quelqu'un a une id�e, je le remercie d'avance.

  4. #4
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 299
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 299
    Billets dans le blog
    2
    Par d�faut
    Je ne sais pas si �a pourra aider, mais je sais que la lib gSoap (c'est un peu plus qu'une lib en fait) fait ce que tu cherches � faire. Pour faire court, gSoap cr�� un client et un serveur, ainsi que les fonctions qui permettent des �changes de donn�es entre les deux, tout �a � partir des headers d'une classe. Et gSoap est open source.

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    D�tails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par d�faut
    Salut,

    Citation Envoy� par G3G3
    C'est justement ce que je ne veux pas faire. Le principe de la bilbioth�que est vraiment que l'�change des donn�es soit transparent pour l'utilisateur.
    (...)
    Je pensais �galement � analyser une string qui contiendrait la d�finition de la structure
    Ca ne me parait pas tr�s logique

    Je pense que tu ne t'en tireras pas sans obliger l'utilisateur � rajouter de l'information, au mieux sous forme de macros...

    Pourquoi ne pas vouloir utiliser la s�rialisation standard � base d'op�rateurs << et >> comme sugg�r� ?
    Au moins les utilisateurs ont l'habitude de �a.

    MAT.

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    81
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 81
    Par d�faut
    r0d >> merci pour l'info sur SOAP, je vais y regarder de plus pr�s. J'esp�re y trouver ce que je cherche.

    MAT >> Le probl�me est que cette biblioth�que ne s'adresse pas forc�ment � des informaticiens et que certaines notions (serialisation, surcharge d'op�rateurs, etc. ) leur sont �trang�res donc � �viter. L'objectif est vraiment d'avoir le formalisme le plus simple possible.

    J'�tudie le probl�me et je ferais dans le "classique" s'il n'y a pas d'autres solutions.

    Merci.

  7. #7
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

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

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Pour g�rer l'�change de donn�es binaire, outre les probl�mes d'endianness que tu as �voqu�s, il y a les probl�mes de type n'ayant pas la m�me taille d'une plateforme � l'autre, et les probl�mes d'alignements qui font que par exemple sur certaines plate-formes, les deux structures suivantes ont des tailles diff�rentes (exemple fourni de t�te avec msdev/windows):

    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
    struct S1
    {
      char c1;
      int i;
      char c2;
    };
     
    struct S2
    {
      int i;
      char c1;
      char c2;
    };
     
    assert(sizeof(S1) == 12);
    assert(sizeof(S2) == 8);
    A part �a, comme le C++ n'est pas r�flexif, je doute que tu trouves une solution directe. Maintenant, si tes utilisateurs ne sont pas � m�me de comprendre un truc du genre :

    Citation Envoy� par Documentation (j'ai pris une syntaxe inspir�e de boost::serialization)
    Le C++ est b�te, pour savoir comment transmettre la donn�e
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     struct DUMMY{
      long L1,L2,L3,L4; 
      float F1,F2;
      double D1,D2,D3; 
      char C1,C2;
      long L5;
    };
    Il faut lui dire :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    SERIALIZATION_DEFINITION
    {
      ar & L1 & L2 & L3 & L4 & F1 & F2 & D1 & D2 & D3 & C1 & C2 & L5;
    }
    je pense qu'il ne faut pas leur demander d'utiliser une biblioth�que C++, mais plut�t �crire un langage propri�taire (�ventuellement graphique) taill� sur mesure pour l'application en question.
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

Discussions similaires

  1. Parcours d'une structure (Type)
    Par rouls dans le forum VB 6 et ant�rieur
    R�ponses: 0
    Dernier message: 27/04/2012, 11h28
  2. Test en parcourant une structure chain�e...
    Par z980x dans le forum C++
    R�ponses: 4
    Dernier message: 28/03/2006, 13h45
  3. Comment mettre en place une structure 3 tiers.
    Par WOLO Laurent dans le forum D�bats sur le d�veloppement - Le Best Of
    R�ponses: 13
    Dernier message: 27/07/2003, 22h01
  4. [toFAQ][socket] Envoi d'une structure
    Par julien20vt dans le forum C++
    R�ponses: 15
    Dernier message: 23/04/2003, 15h47
  5. longueur d'une structure
    Par bohemianvirtual dans le forum C
    R�ponses: 6
    Dernier message: 28/05/2002, 18h31

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