Précédent   Forum du club des développeurs et IT Pro > C et C++ > Bibliothèques > Qt > EDI > Qt Creator
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 23/02/2012, 13h41   #1
rollingB
Invité de passage
 
Homme
Inscription : février 2012
Messages : 1
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : février 2012
Messages : 1
Points : 0
Points : 0
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 :
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 :
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 :
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
rollingB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2012, 19h31   #2
dourouc05
Responsable Qt & Web sémantique

 
Avatar de dourouc05
 
Homme Thibaut Cuvelier
Étudiant
Inscription : août 2008
Messages : 18 580
Détails du profil
Informations personnelles :
Nom : Homme Thibaut Cuvelier
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : août 2008
Messages : 18 580
Points : 74 126
Points : 74 126
Envoyer un message via MSN à dourouc05 Envoyer un message via Yahoo à dourouc05


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 ou PyQt/PySide (tutoriels, FAQ, traductions, sources) ? Contactez-moi par MP.

Pas de question d'ordre technique par MP !
dourouc05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 13h58.


 
 
 
 
Partenaires

Hébergement Web