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++Builder Discussion :

Equivalent C++Builder du "absolute" de Delphi ?


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 98
    Par défaut Equivalent C++Builder du "absolute" de Delphi ?
    Bonjour à tous,
    la question est dans le titre, est-ce que C++Builder possède un équivalent du "absolute" de Delphi...?

    Si non, comment faire pour déclarer plusieurs structures à la même adresse (si c'est possible) et pouvoir utiliser soit l'une soit l'autre suivant la nature de données reçues ?

    Je débute en C++ et tout ce que j'ai tenté s'est soldé par de magnifiques erreurs...

    Merci d'avance,

    Robert

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Par défaut
    Je déchiffre le Pascal avec difficulté, quelle galère pour modifier un composant, donc je ne connais pas "absolute". Mais en C ce que tu décris s'appelle une union (c'est du C, même pas du C++):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    typedef union {        
      struct1 MyStruct1;        
      struct2 MyStruct1;
    } MyUnion;
    où struct1 et struct2 sont des structures (ou variables) préalablement déclarées.

    ex.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    typedef union {
      RECT rc;
      POINT pt;
    } a_Rect_or_a_Point;
     
    a_Rect_or_a_Point ptrc;
    SetRect(&ptc.rc, 0, 0, 32, 32);
    ShowMessage("Coordonnees origine du rectangle x:" + IntToStr(ptc.pt.x) 
                     + "y:" + IntToStr(ptc.pt.y));
    Logiquement x=0 y=0 (Je n'ai pas testé le code). Nous avons ici une union dont les structures ont des données compatibles entre elles (x et y matchent l'origine du rectangle) mais ce n'est pas une obligation et gare alors aux incompatibilités, mais c'est évidemment la même chose en Pascal.

    yarp
    www.senosoft.com

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 98
    Par défaut
    Merci beaucoup,
    même si ce n'est pas encore très clair pour moi, ça me permet de reduire le champ de mes recherches...
    Le absolute de Delphi est peut-être plus naturel pour un débutant.

    Si je déclare une variable (ou un record):

    A : integer;

    et une autre:

    B : byte absolute A;

    A et B ont la même adresse en mémoire. Donc par exemple en utilisant B, je peux manipuler le premier octet de A...

    Merci encore,

    Robert

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Par défaut
    Oui ça fonctionne exactement pareil en C, la structure RECT et la structure POINT ont la même adresse en mémoire. Pa-reil.
    Par contre il faut être prudent car RECT (4 entiers) n'a pas la même taille que POINT (2 entiers), mais comme je le disais c'est vrai aussi en Pascal.
    L'exemple que j'ai pris est avec des structures mais ça fonctionne aussi avec des variables.

    ps Si c'est pour manipuler des octets les opérateurs bitwise & et | sont bien plus pratiques, je dirais même très puissants.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 98
    Par défaut
    L'octet, c'était pour la simplicité... Le but en fait est de définir un buffer pour recevoir des données via l'USB, puis de redefinir ce buffer en autant de structure que de type d'enregistrement attendus afin d'avoir un accès le plus souple possible aux différents champs...

    Entre temps, grâce à ta réponse, j'ai pu mettre en pratique ce système avec deux structures simples et ça correspond tout à fait à ce dont j'avais besoin...

    Encore merci,

    Robert

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

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