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

MFC Discussion :

[MSXML] recuperation memoire ?


Sujet :

MFC

  1. #1
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut [MSXML] recuperation memoire ?
    Bonjour, j'ai developper une surcouche a msxml pour une appli, bon je suis arrivé a faire ce que je voulais mais j'ai un probleme avec la fonction "Release()" il me semble qu'elle sert a recuperer la memoire (vidage des listes, des nodes... et du docXML), ptet je me trompe... en tout cas je fais ca et ca marche pas
    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
     
     
    CNoeud* res = new CNoeud();
    	MSXML2::IXMLDOMDocumentPtr doc;
    	HRESULT hr;
     
    	CoInitialize(NULL);
     
    	hr = doc.CreateInstance(__uuidof(DOMDocument40));
    	if (FAILED(hr)) 
    	{
    		res = NULL;
    	}
    	else
    	{
    		doc->async = VARIANT_FALSE;
     
    		if(doc->load(NomFichier.c_str()) == VARIANT_TRUE)
    		{
    			MSXML2::IXMLDOMNodeListPtr pere = doc->selectNodes(balise.c_str());
    			MSXML2::IXMLDOMNodePtr noeud_courant = NULL ;
     
    			int count = pere->length;
    			int i = 0;
    			while( count-- )
    			{
    				pere->get_item(i++,&noeud_courant);
    				//ajout d'un fils
    				CNoeud* fils = new CNoeud();
    				res->AjouterFils(&fils,noeud_courant,&res);
     
    				//appel recursif avec le nouveau fils
    				GetNoeuds(noeud_courant,&fils);
    			}
    		}
     
    	}
    	doc->Release();
    	CoUninitialize();
     
    	return res;
    }
    et la c'est le drame a lexecution, il veut pas faire le Release sur mon doc, meme si il a bien chargé et donc pas null, meme le CoUninitialize() marche pas je comprends pas...

    Voila si vous avez eu ce pb ou si vous voyer mon probleme Merci,
    Sans vouloir abusé si quelqu'un sait faire pour créer un doc unicode via MSXML... Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Par défaut Re: [MSXML] recuperation memoire ?
    Citation Envoyé par BainE
    Bonjour, j'ai developper une surcouche a msxml pour une appli, bon je suis arrivé a faire ce que je voulais mais j'ai un probleme avec la fonction "Release()" il me semble qu'elle sert a recuperer la memoire (vidage des listes, des nodes... et du docXML), ptet je me trompe... en tout cas je fais ca et ca marche pas
    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
     
     
    CNoeud* res = new CNoeud();
    	MSXML2::IXMLDOMDocumentPtr doc;
    	HRESULT hr;
     
    	CoInitialize(NULL);
     
    	hr = doc.CreateInstance(__uuidof(DOMDocument40));
    	if (FAILED(hr)) 
    	{
    		res = NULL;
    	}
    	else
    	{
    		doc->async = VARIANT_FALSE;
     
    		if(doc->load(NomFichier.c_str()) == VARIANT_TRUE)
    		{
    			MSXML2::IXMLDOMNodeListPtr pere = doc->selectNodes(balise.c_str());
    			MSXML2::IXMLDOMNodePtr noeud_courant = NULL ;
     
    			int count = pere->length;
    			int i = 0;
    			while( count-- )
    			{
    				pere->get_item(i++,&noeud_courant);
    				//ajout d'un fils
    				CNoeud* fils = new CNoeud();
    				res->AjouterFils(&fils,noeud_courant,&res);
     
    				//appel recursif avec le nouveau fils
    				GetNoeuds(noeud_courant,&fils);
    			}
    		}
     
    	}
    	doc->Release();
    	CoUninitialize();
     
    	return res;
    }
    et la c'est le drame a lexecution, il veut pas faire le Release sur mon doc, meme si il a bien chargé et donc pas null, meme le CoUninitialize() marche pas je comprends pas...

    Voila si vous avez eu ce pb ou si vous voyer mon probleme Merci,
    Sans vouloir abusé si quelqu'un sait faire pour créer un doc unicode via MSXML... Merci
    Perso je n'utilise plus tous ces trucs complexes a base de COM.
    Ca fait du code pas très clair.
    Je ne sais pas répondre a ta question par contre je t'encourage à utiliser TinyXML ou d'autres librairies(expat, xerces) open-source et independante de la plateforme.
    Si tu as besoin d'aide je pourrais t'aider

  3. #3
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    helas, la lib c'est un choix du client qui fait confiance a MicroSoft, il devrait pas mais bon.. D'ailleurs mini-coup de gueule leur doc sur MSXML4.0 c'est de la pur m**** voir du foutage de gueule, mais je suis obligé...

    Merci quand meme

  4. #4
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    up dsl, je le ferai plus

Discussions similaires

  1. Msxml : perte memoire ?
    Par jcd29 dans le forum C++Builder
    Réponses: 1
    Dernier message: 08/06/2009, 11h42
  2. recuperer la memoire virtuelle
    Par gaut dans le forum Windows
    Réponses: 4
    Dernier message: 31/01/2007, 20h40
  3. recuperation de la structure d'une base
    Par pascalT dans le forum 4D
    Réponses: 7
    Dernier message: 07/06/2006, 15h32
  4. recuperer chaine memoire
    Par bubu92 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/09/2005, 20h34
  5. Recuperer un enregistrement en memoire
    Par NicolasR dans le forum C++Builder
    Réponses: 2
    Dernier message: 02/03/2005, 17h27

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