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 :

lien entre classes managed et unmanaged


Sujet :

C++/CLI

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    74
    D�tails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 74
    Par d�faut lien entre classes managed et unmanaged
    Bonjour � tous.

    J'ai pr�sentement un gros probl�me de "compatibilit�" entre du code natif et du code managed (CLI)

    Mon probl�me est le suivant.

    J'ai une interface en C# (A), une fa�ade en C++(CLI)(b) managed et une classe en C++ native (C).

    Donc, lorsque je d�marre l'interface, cela va comme suit.

    (A) a un pointeur vers (B) qui a un pointeur vers (C)

    (A) -> (B) -> (C)

    Ailleurs dans mon environnement, j'ai un autre processus (en c++ natif) qui peut envoyer des evenements � (C)

    J'aimerais, lorsque je re�oit ces evenements que C communique a B les donn�es qui ensuite mettera a jour une Form dans A.

    Ou je bloque, c'est la communication de C vers B.... (unmanaged vers managed) Malheureusement je ne peux avoir de back pointer vers B dans C

    Avez vous une id�e de comment je pourrais regler mon probl�me.
    Je suis malheureusement pris avec ces technologies....

  2. #2
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Il existe la classe gcroot qui permet d'avoir une classe C++ poss�dant un handle manag� (dans mon cas, j'utilise une version weak inspir�e de cette m�me classe, car je n'ai pas envie que mon �v�nement fasse survivre l'objet manag�).

    Pour plus de d�tails, il faudrait conna�tre le m�canisme d'�v�nements que tu utilises. J'utilise pour ma part boost::signal.


    Donc, dans B, je d�finis une variable de type gcroot<B> pointant sur *this. J'accroche gr�ce � bind dans le constructeur de B des fonctions libres aux �v�nements �mis pas C. Ces fonctions libres (pure C++, donc accrochables � l'�v�nement) prennent en param�tre un gcroot<B>, ainsi que les autres param�tres voulus par l'�v�nement.

    Dans ces fonctions libres, je r�cup�re b � partir du gcroot<B>, et voil� !
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    74
    D�tails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 74
    Par d�faut
    Si je comprends bien, je pourrais dans b d�clar� un objet de type

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    gcroot<b> uneInstanceDeB = *this;
    ensuite, j'instancie dans B la classe C

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    C uneInstance = new C();
    par la suite je peux faire la chose suivante :

    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
     
    c->setInstanceOfB(uneInstanceDeB);
     
    /// et puis dans C
     
    void setInstanceOfB(gcroot<b> unB)
    {
         /// mInstanceOfB est une variable membre...
         mInstanceOfB = unB;
    }
     
    /// lors de la reception de l'event dans C
     
    void eventRecuDansC(Info lesInfosAUpdater)
    {
        mInstanceOfB->updateInfo(lesInfosAUpadater);
    }

    Est-ce que tout �a a du sens???

    Merci

  4. #4
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    �a devrait marcher, m�me si je ne consid�re pas �a comme id�al, car �a ne reprends pas vraiment la philosophie d'un �v�nement. En effet, dans ce que tu proposes, C doit savoir qu'il est observ� par un B, et doit contenir dans son impl�mentation du code C++/CLI.

    Dans ce que je proposais, C est une classe pur C++, dans l'interface comme dans l'impl�mentation, et ne sait pas par qui elle va �tre observ�e. Elle fourni juste un m�canisme d'event C++ � qui est int�ress�.

    C'est B qui fait le pont entre les deux mondes, ce qui tombe bien, elle est l� pour �a. Elle va s'accrocher au m�canisme d'event par l'interm�diaire de son gcroot.
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

Discussions similaires

  1. WebService et ComplexType : lien entre classes
    Par macben dans le forum JWS
    R�ponses: 1
    Dernier message: 01/10/2009, 10h11
  2. Liens entre classes Monad, Functor, etc.
    Par limestrael dans le forum Haskell
    R�ponses: 15
    Dernier message: 11/08/2009, 20h10
  3. liens entre classes
    Par gate35 dans le forum D�buter
    R�ponses: 7
    Dernier message: 28/05/2009, 17h01
  4. R�ponses: 7
    Dernier message: 28/04/2009, 17h46
  5. Echange d'objet entre classe manag�e et non manag�e
    Par alexadvance dans le forum C++/CLI
    R�ponses: 15
    Dernier message: 13/04/2007, 14h45

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