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

  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 505
    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 505
    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 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
    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