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++/CLI Discussion :

Partager un pointeur entre 2 classes C++/CLI


Sujet :

C++/CLI

Vue hybride

JOKER6 Partager un pointeur entre 2... 22/03/2017, 16h50
bacelar Parce que c'est ce que vous... 22/03/2017, 19h33
JOKER6 Merci pour votre réponse. ... 23/03/2017, 10h49
Médinoc Pourquoi ne pas exposer... 23/03/2017, 11h02
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 52
    Par défaut Partager un pointeur entre 2 classes C++/CLI
    Bonjour,

    J'ai 3 projets: projet C#, projet C++ et projet C++/CLI Wrapper. Mon but est d'utiliser des classes natifs c++ dans un projet C#. C'est pourquoi j'ai créé un projet C++/CLI.
    Dans mon projet C++/CLI j'ai 2 classes, classA et classB.

    ClassA:

    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
    //classA.h
     
    #pragma once
    #include "classB.h"
     
    using namespace System;
     
    namespace Wrapper {
     
    public ref class ClassA
    {
    public:
        ClassA();
        virtual ~ClassA();
     
        void setProject( String^ i_project );
     
    private:
        String^ m_project;
        ClassB^ m_classB;
     
    };
     
    }
    et

    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
    //classA.cpp
     
    #include "stdafx.h"
    #include "classA.h"
     
    using namespace Wrapper;
     
     
    ClassA::ClassA()
    {
        m_classB = gcnew ClassB();
     
    }
     
    ClassA::~ClassA()
     
    {
        if (m_classB)
            delete m_classB;
    }
     
    void ClassA::setProject( String^ i_project )
    {
        m_classB->setProjectFromClassA( i_project );
    }
    Class B:

    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
    //classB.h
     
    #pragma once
     
    using namespace System;
     
    namespace Wrapper {
     
        public ref class ClassB
        {
        public:
            ClassB();
            virtual ~ClassB();
     
            inline void setProjectFromClassA( String^ i_project ) { m_project= i_project; };
            void methodB();
     
        private:
            String^ m_project;
     
        };
     
    }
    et

    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
    //classB.cpp
     
    #include "stdafx.h"
    #include "classB.h"
     
    using namespace Wrapper;
     
     
    ClassB::ClassB()
    {
     
    }
     
    ClassB::~ClassB()
    {
     
    }
     
    void ClassB::methodB()
    {
        String^ test = m_project;
    }
    Dans mon projet C#, je voudrais réutiliser ces 2 classes A et B:
    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
    27
    28
    29
    30
    using System;
    using System.IO;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using Wrapper;
     
    namespace CSharpInterface
    {
        public partial class Program
        {
            public ClassA myclassA = new ClassA();
            public ClassB myclassB = new ClassB();
            public void test()
            {
                myclassA.setProject("test");
                myclassB.methodB();
            }
     
     
            static void Main(string[] args)
            {
                Program myprogram = new Program();
                myprogram.test();
            }
        }
    }
    Mais j'ai un problème lors du debug dans le projet C#.Le string test dans la methodB() de classB reste toujours null. Pourquoi? Comment dois-je implémenter mes classes A et B, ainsi que mon projet C# pour que je puisse bien récupérer le string test dans la methodB()? Avez-vous un exemple de code svp? Je suis forte débutante et un exemple de code m'aiderait beaucoup.

    Merci pour votre aide svp.

    Cordialement,

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 482
    Par défaut
    Mais j'ai un problème lors du debug dans le projet C#.Le string test dans la methodB() de classB reste toujours null. Pourquoi?
    Parce que c'est ce que vous avez fait.

    myclassA dispose d'une instance de classB qui lui est propre.
    myclassB est donc une variable avec l'initialisation par défaut, donc m_project est null.

    myclassA.setProject("test"); va donc initialisé le m_project du champ m_classB de myclassA, pas le m_project de myclassB.

    Donc, dans myclassB.methodB();, m_project est null donc test est null.

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 52
    Par défaut
    Merci pour votre réponse.

    J'ai bien compris le problème mais comment y remédier pour le pointeur soit partagé entre les 2 classes A et B tout en le définissant qu'une seule fois dans la classe A?

    Avez-vous une proposition de code svp?

  4. #4
    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
    Pourquoi ne pas exposer l'objet B de ClassA?
    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.

Discussions similaires

  1. Partager du code entre plusieurs classes-filles
    Par gvdmoort dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 24/03/2012, 00h58
  2. Partager une variable entre plusieurs classes
    Par jasonpolakow dans le forum Windows Forms
    Réponses: 8
    Dernier message: 06/01/2011, 10h02
  3. Réponses: 12
    Dernier message: 19/04/2008, 16h19
  4. partager un objet entre classes
    Par kirua2150 dans le forum Access
    Réponses: 5
    Dernier message: 26/01/2007, 11h33
  5. Réponses: 7
    Dernier message: 06/04/2006, 18h17

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