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 :

Objets Globaux en c++ Managé


Sujet :

C++/CLI

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 3
    Par défaut Objets Globaux en c++ Managé
    Bonjour tout le monde !

    Je suis en train de développer un programme en C++ managé avec Visual Studio .net 2003, j'ai beaucoup cherché sur des forums et sur des sites, mais en vain, c'est pourquoi je vous demande un peu d'aide .

    Une des tâches que je dois réaliser est la sérialisation XML de classes, ce qui fait que je dois utiliser du c++ managé.
    Le problème, c'est que j'ai " absolument " besoin d'avoir un ou plusieurs objets déclarés en global. Le probleme , c'est qu'en managé, c'est pas permis ...
    Première question donc, comment contourner ce problème, j'ai déjà essayé de ruser en encapsulant, mais en vain ....

    Ensuite ( mais je pense que quand je saurai comment faire une délaration en global, ça ira mieux ) j'ai aussi besoin de stocker des informations parsées depuis un fichier externe dans plusieurs vecteurs, toujours en global. Le hic, c'est que "vector" ne peut pas gérer des objets managés.
    J'ai deja un peu regardé ArrayList, mais le problème c'est que je perds le type de mes données une fois stockées, et quand je sérialise en XML, j'ai "ArrayofAnyType" ...

    Merci beaucoup d'avance

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Tu peux "simuler" une variable globale en la mettant en membre statique d'une classe :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ref class UneClasse
    {
        public:
            static Object^ UneVariableGlobale;
    }

    Pour ton problème de vecteur, tu peux utiliser la classe générique System.Collections.Generic.List<T> (plus ou moins équivalente à la classe vector de la STL)

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 3
    Par défaut
    Merci de ta réponse rapide !

    J'ai essayé ce que tu m'a proposé en ce qui concerne les variables globales, cette erreur apparait :

    "cannot declare a global or static managed type object or a __gc pointer"

    Il s'agit de la même erreur que j'ai depuis que j'essaye de faire des variables globales en managé.

    Aussi, je ne dispose pas de System.Collections.Generic.List...
    Le seul truc qui semble s'en rapprocher est System::Collections::IList, mais à mon avis je ne suis pas sur la bonne voie ...

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Ah ? ben chez moi ça fonctionne...
    Au fait, tu travailles avec quelle version de VS ? et du framework ? Ce que j'ai dit est valable à partir de VS2005 / .NET 2.0... les génériques n'existaient pas en .NET 1.x, et "ref class" s'écrivait "__gc class" (il me semble)

  5. #5
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Au fait, dans l'exemple de tomlev, il ne faut pas par la suite créer une instance de UneClasse, mais y accéder via UneClasse::UneVariableGlobale. Enfin, c'est juste une impression ...

  6. #6
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    tu m'as vu ?

    Citation Envoyé par smyley Voir le message
    Au fait, dans l'exemple de tomlev, il ne faut pas par la suite créer une instance de UneClasse, mais y accéder via UneClasse::UneVariableGlobale. Enfin, c'est juste une impression ...

  7. #7
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 3
    Par défaut
    Je suis en VS 2003, framework 1.1.

    Moi, ^ provoque une erreur à la complilation et je dois utiliser * à la place.

    En fait, j'ai une classe managée "program" qui est en quelque sorte la racine de mon fichier XML. Elle contient ,entre autres, un vecteur de variables globales de taille variable ( que je n'arrive toujours pas à faire vu que vector est non managé, et que System::Collections::Generic::List ne m'est pas disponible.

    Lorsque j'essaye de créér PG en global comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	static  program __gc * PG = __gc new program() ;
    j'obtiens
    "cannot declare a global or static managed type object or a __gc pointer"
    J'ai même essayé de faire une classe qui ne comprend que PG, mais ça donne le même résultat.

    Mon .cpp principal est organisé comme ceci :

    ** Variables globales ( c'est ici que je veux mettre PG )

    ** namespace {
    .... contient des fonctions qui utilisent PG, elles instancient les objets issus du parsing
    }

    ** Ensuite une grammaire de parsing :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    struct cga_grammar : public grammar<cga_grammar>
    {
    	template <typename ScannerT>
    	struct definition
    	{
    		definition(cga_grammar const& /*self*/)
    		{ ... }
               }      
    }
    ** Enfin, le main qui lance le parsing et serialise en XML

    Le fait de mettre PG dans le main ne convient pas car il n'est pas alors accessible dans les fonctions du name space ......

    J'espère avoir été clair, merci encore

Discussions similaires

  1. Ajouter des objets à une liste multiprocessing.Manager.list()
    Par thepepper dans le forum Général Python
    Réponses: 4
    Dernier message: 06/07/2010, 14h27
  2. Disposition d'Objets globaux
    Par Carrel dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 27/06/2009, 12h35
  3. [C++]sizeof d'un objet managée
    Par Akta3d dans le forum C++/CLI
    Réponses: 4
    Dernier message: 22/12/2006, 12h15
  4. Probleme utilisation d'Objets managé grace a gcroot
    Par pepefourras dans le forum MFC
    Réponses: 4
    Dernier message: 16/05/2006, 00h26
  5. [MFC] Objets globaux.
    Par giova_fr dans le forum MFC
    Réponses: 4
    Dernier message: 07/07/2005, 16h36

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