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 :

récupérer un objet par reflexion


Sujet :

C++

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

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

    Informations forums :
    Inscription : Février 2010
    Messages : 76
    Par défaut récupérer un objet par reflexion
    Bonjour,
    j'ai un problème lors du construction des objet,j'ai deux Class A et B de la forme suivant :

    Class A
    {
    B b1
    .
    .
    .
    }
    Class B
    {
    A a1

    .
    .
    .
    }

    le main de mon programme construit un objet a2 de type A
    et lors de la construction de l'objet de type B je veux récupérer l'objet a2 qui a été construit dans le main du programme (A est une Windows forme) par réflexion est ce que ça est possible comment je dois faire
    merci d'avance

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    FAQ : déclaration anticipée/forward declaration/inclusion croisée/
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    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
    Par défaut
    Salut,
    La référence proposée par David : Comment créer 2 classes qui font référence l'une à l'autre ?. Ça, c'est pour la mécanique.

    Maintenant, il n'existe pas de réflexion dans le langage en tant que tel. Pour récupérer un objet existant soit tu passes par un bibliothèque dédiée (comme CAMP, par exemple), soit tu utilises un design appropriée (DP Builder ou Registry par expl).

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Salut,

    Tel quel, il y aura, cependant, un gros problème à ce que tu veux faire: comment veut tu faire tenir un B dans un A si, dans le même temps, tu souhaite faire entrer un A dans le B Le compilateur va partir en boucle lorsqu'il devra déterminer l'espace mémoire nécessaire à chacun des types, car, s'il augmente la taille de A pour y faire tenir un B, il augmente, de facto, la taille du B ce qui nécessiterait... d'augmenter la taille du A

    Tu devra donc au minimum utiliser un pointeur pour représenter le A dans le B (ou pour représenter le B dans le A... ou les deux), avec tout le cortège de problème que cela peut entrainer...

    Avant de décider de créer cette référence circulaire, je te proposerais donc de très bien réfléchir à ce besoin
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

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

    Informations forums :
    Inscription : Février 2010
    Messages : 76
    Par défaut
    le probleme c'est que j'ai une class A (Windows form) et dans une dll on fait une instance de A,cette instance ouvre un port comm (lors que je cree une nouvelle instance je peut pas ouvrir ni fermer le port comm ) je cherche a recuperer l'instance cree dans la dll,est ce que ca est possible? on ne peu pas passer par les singletons,dans la dll y a l'appel au constructeur pour construir l'objet,
    merci

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

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

    Informations forums :
    Inscription : Février 2010
    Messages : 76
    Par défaut
    ce que je cherche est de récupérer l'objet crée à partir de la DLL par réflexion
    (l'objet utilise un port com)
    merci

  7. #7
    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
    Par défaut
    Salut,

    Il n'y a pas de réflexion nativement en C++. Tu dois passer par une solution explicite. Soit en exposant une fonction dans ta DLL qui retourne ton instance de A, soit en utilisant une bibliothèque dédiée de reflexion, soit en mettant en oeuvre un pattern type registry, soit en etc...

    Si c'est du C++/CLI, la réponse est peut être différente mais il faut le préciser dans ta question

  8. #8
    screetch
    Invité(e)
    Par défaut
    serialisation peut être différent de reflexion. Ce n'est pas tout a fait pareil.

  9. #9
    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
    Par défaut
    Salut screetch,
    Citation Envoyé par screetch Voir le message
    serialisation peut être différent de reflexion. Ce n'est pas tout a fait pareil.
    Pourquoi tu parles de sérialisation

  10. #10
    screetch
    Invité(e)
    Par défaut
    ah j'ai pu confondre. j'ai lu
    ce que je cherche est de récupérer l'objet crée à partir de la DLL par réflexion
    (l'objet utilise un port com)
    merci
    j'ai cru qu'il s'agissait de récupérer une donnée par un port com.
    Mais si je relis attentivement je vois que ce n'est pas le cas donc je suis a côté.

    (EDIT) mais je crois par contre que la reflexion est tout aussi a côté de la plaque

  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
    Par défaut
    Citation Envoyé par screetch Voir le message
    (EDIT) mais je crois par contre que la reflexion est tout aussi a côté de la plaque
    Oui. Ca sent la retranscription d'un terme à peu près compris à partir d'un autre langage

  12. #12
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

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

    Informations forums :
    Inscription : Février 2010
    Messages : 76
    Par défaut réflexion
    Merci
    est ce que on peu récupérer une instance d'une Class par réflexion

  13. #13
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Je crois que j'ai compris ce que tu veux faire : récupérer une instance qui est créée par un code dont tu n'as pas la responsabilité.

    Tout dépend de ta marge de manœuvre : es-tu l'auteur de la classe A dont tu cherches à récupérer une instance ? Es-tu l'auteur de la DLL concernée ? Si la réponse est non à ces deux questions, alors tu ne peux pas.

  14. #14
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

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

    Informations forums :
    Inscription : Février 2010
    Messages : 76
    Par défaut
    Merci
    oui,j'ai besoin de cette instance dans la Class A,l'instance est crée a l’exécution de L'Assembly (DLL),le dll est utiliser par un autre code je peu pas modifie leur code source?

  15. #15
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Si tu ne peux :
    - Pas modifier le code source de la classe dont tu cherches à récupérer une instance.
    - Pas modifier le code source qui crée cette instance (et je suppose qu'ils ne fournissent pas d'accesseurs).

    Alors c'est simple : la réponse est non, tu ne peux pas. A moins de faire des hacks dégueus et instables en tapant dans la mémoire, et personne ne t'aidera à faire ça car c'est compliqué et ignoble . Il faut demander à l'auteur de la DLL de te donner un accesseur si tu en as besoin.

  16. #16
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

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

    Informations forums :
    Inscription : Février 2010
    Messages : 76
    Par défaut
    non je peu modifie le code de la Class B dans lequel j'ai besoin de cette instance de A,par contre j'ai pas le doit de modifie celle de la dll ,

  17. #17
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Tu as besoin d'une instance de A dans la classe A ???

    Quelle est la classe que tu contrôles ? Quelle est celle dont tu cherches à récupérer une instance (et pas tu cherches à récupérer une instance, la différence est fondamentale) ?

  18. #18
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

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

    Informations forums :
    Inscription : Février 2010
    Messages : 76
    Par défaut
    je doit récupérer une instance de A,cree dans la DLL, dans mon code (exp de la class B) je peux modifie le code de A(dll a besoin de plusieur instance,chaque instance utilise un port comm)
    merci

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

Discussions similaires

  1. recuperer un objet par reflexion
    Par tawrirte dans le forum VB.NET
    Réponses: 10
    Dernier message: 14/04/2011, 15h36
  2. récupérer un objet par critère
    Par kinshinori dans le forum Hibernate
    Réponses: 4
    Dernier message: 04/06/2010, 17h07
  3. Récupérer objet par son nom dans une chaîne
    Par peijnoob dans le forum C#
    Réponses: 7
    Dernier message: 14/02/2008, 16h47
  4. [JNDI] récupérer un objet par jndi
    Par coco-sup dans le forum Java EE
    Réponses: 6
    Dernier message: 08/05/2007, 16h37
  5. Récupérer un objet par message
    Par Linkin dans le forum Delphi
    Réponses: 5
    Dernier message: 08/02/2007, 08h39

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