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

Qt Creator Discussion :

Importer l'assembly .NET system.xml dans Qt


Sujet :

Qt Creator

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Importer l'assembly .NET system.xml dans Qt
    Bonjour à tous !

    Je suis actuellement en train de finaliser mon tout premier projet en C++. Et tout marchait bien... jusqu'à ce que je rencontre un problème qui dépasse mes connaissances. Je pense qu'il s'agit d'un problème d'importation de librairie mais je n'en suis même pas sûr.

    Explication:
    J'ai fait tout mon programme grâce au framework Qt, j'ai donc codé sous Qt Creator. Ma dernière classe à construire à pour but de lire des fichiers XML (des coordonnées GPS)pour retourner les données qui m'intéressent sous un format utilisable en C++ (je cherche donc à construire un objet Trajet qui est un ensemble de vector<double>). J'ai pour cela trouvé un "parser" (version que j'ai adaptée en C++ depuis un code C# ici). Le problème c'est que ce parser utilise l'assembly .NET system.XML.

    Et évidemment ça ne marche plus dans mon code. J'ai ajouté dans mon main pour inclure les librairies nécessaires:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #using <mscorlib.dll>
    using namespace System;
    #using <System.Xml.dll>
    using namespace System::Xml;
    Mais cela m'affiche :
    erreur : C1190: le code cibl‚ manag‚ requiert une option '/clr'

    J'ai donc compilé en mode "MSVC2010 (Qt SDK) release" mais j'ai encore cette erreur qui s'affiche. Je ne sais vraiment pas comment le résoudre et c'est d'autant plus rageant que c'est la dernière étape de mon programme.

    Pour info voici mon code simplifié :

    Trajet.h

    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
    #ifndef TRAJET_H
    #define TRAJET_H
    //.h Classe permettant de parser un fichier XML afin d'obtenir un ensemble de vecteurs avec les coordonnées qui nous intéressent.
    #include <vector>
    #include <iostream>
    //#include <cstring>
    using namespace std;
    class Trajet
    {
    public:
        Trajet(void);
        Trajet(QString);
        ~Trajet(void);
    private:
        vector<double> _x ;
        vector<double> _y ;
        vector<double> _z ;
        vector<double> _speed ;
        vector<double> _acc ;
        vector<double> _denivele ;
        vector<double> _meteo ;
        };
    #endif // TRAJET_H
    Trajet.cpp
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #using <mscorlib.dll>     // ca c'est pour le system.convert
    using namespace System;
    #using  <System.xml.dll>    // ca c'est pour le xmlTextReader 
    namespace System::Xml;
    #include <iostream>
    using namespace std;
     
    Trajet::Trajet(QString filenameQ)    // constructeur d'un parsing depuis un fichier Xml.
    {
        // Set to read the input GPX file as XML
        XmlTextReader^ fichierLu = nullptr;
        String^ filename = filenameQ.toStdString();
        fichierLu = new XmlTextReader( filename ) ;  // Les slashes du nom doivent etre des / et non des \
        // Read each XML node
        while (fichierLu -> Read())                                                        // true si il reste au moins un noeud à explorer
        {
            if (fichierLu -> Name == "trkpt" && fichierLu ->NodeType == XmlNodeType::Element)   // ATTENTION : "lat" et "lon" sont des attributs de "trkpt"
            {
                // Start a new trackpoint object and add lat / lon to it (they are attributes of <trkpt>)
                /*trackpoint = new GpsTrackPoint(); // Your constructor goes here*/
                while (fichierLu -> MoveToNextAttribute())       // true si il rest eau moins un attribut à explorer
                {
                    // Read the attributes. TODO MUST CATCH EXCEPTIONS HERE!!
                    if ( fichierLu -> Name == "lat") { _x.push_back(Convert::ToDouble(fichierLu -> Value)); }
                    if ( fichierLu -> Name == "lon") { _y.push_back(Convert::ToDouble(fichierLu -> Value)); }
                }
            }
            else if (fichierLu -> Name == "ele" && fichierLu -> NodeType == XmlNodeType::Element)  // ATTENTION "ele" est un noeud de meme hierarchie que "trkpt"   
            {
                // Add elevation / altitude to the track point (it is a tag by itself)
                while (fichierLu -> NodeType != XmlNodeType::Text)
                {
                        fichierLu -> Read();
                        _z.push_back(Convert::ToDouble(fichierLu -> Value));       //TODO MUST CATCH EXCEPTIONS HERE!!
                }
            }
            else if (fichierLu -> Name == "speed" && fichierLu -> NodeType == XmlNodeType::Element)  // ATTENTION "speed" est un noeud de meme hierarchie que "trkpt"
            {
                // Add speed to the track point (it is a tag by itself)
                while (fichierLu -> NodeType != XmlNodeType::Text)
                {
                    fichierLu -> Read();
                    _speed.push_back(Convert::ToDouble(fichierLu -> Value));    //TODO MUST CATCH EXCEPTIONS HERE!!
                }
            }
        }
    }
    Merci d'avance.

    RollingB

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 593
    Points
    188 593
    Par défaut


    Il faut compiler en C++/CLI (mélanger du natif et du managé, c'est jamais bon pour la portabilité)... ou utiliser QtXml ! Je te propose vraiment d'utiliser la deuxième. Sinon, il devrait suffire de modifier ton .pro pour ajouter le bout de ligne de commande demandé à l'appel du compilateur pour changer de langage, mais je n'ai jamais fait ça.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

Discussions similaires

  1. importation de d'un fichier XML dans une BD
    Par SALIA LOUA OLIVIER dans le forum VB.NET
    Réponses: 4
    Dernier message: 20/06/2011, 16h42
  2. [XML] importer un fichier .log ou .xml dans une base de donnée MySQL
    Par sorayati dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 02/08/2009, 16h16
  3. Une réference d'assembly manquante: System.Xml
    Par chenel80 dans le forum Framework .NET
    Réponses: 4
    Dernier message: 27/04/2009, 16h47
  4. Réponses: 1
    Dernier message: 24/03/2007, 18h50
  5. Importer le contenu un fichier xml dans un autre fichier xml
    Par gedeon555 dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 27/07/2005, 11h49

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