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

Visual C++ Discussion :

MSXML et exceptions


Sujet :

Visual C++

  1. #1
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Par défaut MSXML et exceptions
    Bonjour,

    Je me heurte à certains problèmes face à l'utilisation de msxml (a priori dans sa version 2) dans eVC++.
    Je veux utiliser le langage XPath dans les fonctions selectSingleNode et selectNodes.
    Au départ je créais un document de type IXMLDocument et le chargement (avec la méthode load) fonctionnait plutot bien (j'arrivais à récupérer des noeuds... pas d'erreur majeure).
    Il semblerait que pour pouvoir utiliser XPath je doive spécifier le langage de requête utilisé. Pour ce faire je dois créer non pas un IXMLDocument mais un IXMLDocument2. Cette fois le chargement me lace une grosse erreur. Sur certains forums on m'a dit que cela pouvait venir du fait que mon fichier XML est mal formé.
    Ainsi j'ai voulu faire un try catch sur ma méthode load. Après avoir réussi à activer le handler d'exception (-GX dans les settings du projet...), je ne catch toujours pas l'erreur alors que j'ai mis catch (...)

    Je n'y comprends goutte...

    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
     
    	VARIANT vXMLSrc; 
    	vXMLSrc.vt = VT_BSTR; 
    	vXMLSrc.bstrVal=::SysAllocString(L"\\FichierDonneesCE07.xml");
    	HRESULT hr = ::CoInitializeEx( NULL , COINIT_MULTITHREADED );
    	CComPtr<IXMLDOMDocument2> iXMLDoc;
    	CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument2, (void**)&iXMLDoc); 
    	CComQIPtr< IObjectSafety, &IID_IObjectSafety>iSafety(iXMLDoc);
    	if (iSafety) 
    	{ 
    		DWORD dwSupported, dwEnabled; 
    		iSafety->GetInterfaceSafetyOptions(IID_IXMLDOMDocument2,
                                       &dwSupported,&dwEnabled);
    		iSafety->SetInterfaceSafetyOptions(IID_IXMLDOMDocument2,
                                       dwSupported,0);
    	}
     
    	VARIANT_BOOL bSuccess=false;
    	CString a ("1");
    	AfxMessageBox(a);
    	try
    	{
    		hr=iXMLDoc->load(vXMLSrc,&bSuccess);
    	}
    	catch(...)
    	{
    		CString a ("Erreur catchée");
    		AfxMessageBox(a);
     
    	}

  2. #2
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    à tout hasard: as-tu vérifié que iXMLDoc soit valide lors de l'appel à load(vXMLSrc,&bSuccess);
    Quelle est la valeur de hr?

  3. #3
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Par défaut
    Je ne peux rien faire apres load ! Puisque c'est cela qui fait planter mon application... J'aimerais justement pouvoir faire des tests sur la valeur de retour, sur les erreurs possibles de parsing... mais ce n'est pas possible puisque load fait tout planter et que je n'arrive même pas à catcher l'exception...

  4. #4
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par r0d
    as-tu vérifié que iXMLDoc soit valide lors de l'appel à load(vXMLSrc,&bSuccess);

  5. #5
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Par défaut
    En effet avant l'appel à load la méthode CoCreateInstance ne fonctionne pas normalement. J'ai un retour égal à NO_INTERFACE... Cela explique un peu mieux le problème. Reste à trouver pourquoi cela ne fonctionne pas et pourquoi la méthode load plante sans lever d'exception car CoCreateInterface ne fait pas planter l'appli puisque ma message box (celle qui affiche 1) s'affiche...

  6. #6
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 12
    Par défaut
    Je ne sais pas si cela peut aider mais moi j'utilise le CreateInstance.

Discussions similaires

  1. Exception & Try..catch
    Par PurL dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/12/2002, 15h35
  2. [MSXML] Comment empécher la conversion des entités ?
    Par nima dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 08/11/2002, 14h14
  3. Réponses: 3
    Dernier message: 01/11/2002, 14h30
  4. Réponses: 5
    Dernier message: 12/06/2002, 15h12
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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