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 :

Attribut __property et accesseurs associés


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de sylvain.cool
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 242
    Par défaut Attribut __property et accesseurs associés
    Bonjour,

    J'ai créé un objet DCOM qui a 1 propriété nommé "nb". Mon éditeur (C++builder) a lui-même créé les accesseurs correspondants: set_nb et get_nb.
    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
    17
    18
    19
    20
    21
     
    interface IComplexClass  : public IDispatch
    {
    public:
      virtual HRESULT STDMETHODCALLTYPE get_nb(long* Value/*[out,retval]*/) = 0; // [201]
      virtual HRESULT STDMETHODCALLTYPE set_nb(long Value/*[in]*/) = 0; // [201]
     
    #if !defined(__TLB_NO_INTERFACE_WRAPPERS)
     
      long __fastcall get_nb(void)
      {
        long Value;
        OLECHECK(this->get_nb((long*)&Value));
        return Value;
      }
     
      __property   long            nb = {read = get_nb, write = set_nb};
     
    #endif //   __TLB_NO_INTERFACE_WRAPPERS
     
    };
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    STDMETHODIMP TComplexClassImpl::set_nb(long Value)
    {
      try
      {
     
      }
      catch(Exception &e)
      {
        return Error(e.Message.c_str(), IID_IComplexClass);
      }
      return S_OK;
    };
     
    STDMETHODIMP TComplexClassImpl::get_nb(long* Value)
    {
      try
      {  
     
      }
      catch(Exception &e)
      {
        return Error(e.Message.c_str(), IID_IComplexClass);
      }
      return S_OK;
    };
    Mais ils sont tous les 2 vides.

    Si je ne met rien à l'intérieur, ma propriété n'est pas mise à jour via un set.
    Code du main client:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        // creation de l'objet distant 
        TCOMIComplexClass CC = CoComplexClass::CreateRemote(L"UC06P1556.fr.pierre-fabre.lcl");
     
        // on set la propriété nb
        CC.set_nb(10);
     
        // on la recupere    
        long value;
        CC.get_nb(&value);
     
        // on l'affiche
        cout << "nb client: " << value << endl;
    Ca me donne:
    Et si je met dans le set:
    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
    17
    18
    19
     
    STDMETHODIMP TComplexClassImpl::set_nb(long Value)
    {
      try
      {
         // on affiche Value dans le memo
         AnsiString texte = "Set Value: ";
         texte += Value;
         Form1->Memo1->Lines->Add(texte); 
     
         // on donne la valeur Value à la propriété nb
         this->nb = Value;
      }
      catch(Exception &e)
      {
        return Error(e.Message.c_str(), IID_IComplexClass);
      }
      return S_OK;
    };
    La, ça tourne en boucle jusqu'au débordement de la pile:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ......
    Value: 10
    Value: 10
    Value: 10
    Value: 10
    .....
    Quelqu'un voit-il d'où vient le problème?

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par défaut
    le long nb est juste un alias pour les fonctions de ta propriété (faire nb=x est la même chose que faire set_nb(x)).

    Tu dois utiliser une variable membre supplémentaire.
    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.

  3. #3
    Membre éclairé Avatar de sylvain.cool
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 242
    Par défaut
    Donc en fait, il n'y a rien derrière cette variable.

    Elle sert juste de lien pour utiliser l'opérateur =.

    Mais après, il faut un véritable attribut membre que l'on affecte dans set_nb.

    J'ai bien compris?

    Merci de ta réponse aussi rapide comme toujours.

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par défaut
    Oui.
    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.

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

Discussions similaires

  1. [MCD] Unicité d'un attribut porté par une association
    Par Kalas22 dans le forum Schéma
    Réponses: 1
    Dernier message: 06/06/2011, 18h33
  2. Réponses: 7
    Dernier message: 28/08/2008, 22h52
  3. Association Attribut = Donnee
    Par Paxaranne dans le forum SQL
    Réponses: 5
    Dernier message: 17/07/2007, 20h42
  4. Realation many-to-many + attributs d'association
    Par n!co dans le forum Hibernate
    Réponses: 10
    Dernier message: 27/10/2006, 18h04
  5. [Language][constructeur] - attributs ou accesseur
    Par grand's dans le forum Langage
    Réponses: 6
    Dernier message: 26/04/2005, 08h47

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