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

Langage Delphi Discussion :

TXmlDocument en local


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 23
    Points : 16
    Points
    16
    Par défaut TXmlDocument en local
    ça fait un moment que je butte sur ce problème alors je me décide à faire appel à votre aide.
    Je n'arrive pas à travailler avec un TXMLDocument que je déclare en local dans une procédure. Il me sort toujours un erreur d'exécution. Il fallait donc à chaque fois que je déclare un document XML sur la form pour que ça marche. Mais la, je réalise une application console, alors je ne sais pas comment faire, j'ai essayé ça après plusieurs recherche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure tache;
    var
      ToDo : IXMLDocument;
    begin
      ToDo := TXMLDocument.Create(nil);
      ToDo.LoadFromFile('D:\fic_pas\ToDo.xml');
      ToDo.Active := true;
    end;
    Mais ce code plante sur le loadFromFile, ou sur le active:=true si je le met en premier

    l'erreur provoquée : 'Classe d'exception EOlsysError avec le message CoInitialize n'a pas été appelé'

    alors merci pour votre aide


  2. #2
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Ton code fonctionne bien, je l'ai testé, il n'y a pas de pb.

    A priori le pb vient du document xml, il doit être invalide ou corrompu.
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  3. #3
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    En même temps si tu dis que ça plante sur le active quand tu le mets en premier, ça n'a rien à voir avec le doc. Etrange.

    Tu as quelle version de Delphi ?
    Au cas où, met un owner dans le create.
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    je viens de vérifier le fichier XML et j'en ai testé un autre et ça ne fonctionne toujours pas.
    En plus, ça ne viens pas de la puisque ça plante même quand je met le active:=true avant le loadfromfile.


    Je ne comprend vraiment pas
    Pour info, je suis sous delphi 7 entreprise

  5. #5
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Au cas où, crée un nouveau projet et teste juste ta fonction (c'est ce que j'ai fait).
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tonXMLDocument := tXMLDocument.Create(application) ;
    devrait résoudre ton problème !

    Bug from delphi ! ;-)

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    ça marche quand je crée un nouveau projet mais pas dans une application console.....

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 298
    Points : 318
    Points
    318
    Par défaut
    Le message d'erreur est clair l'API windows CoInitialize (initialisation des objets COM) n'a pas été appelé. Je pense que cette routine n'est appelé qu'en mode graphique (dans les routines VCL) et pas en mode console.

    Essai d'appeler CoInitialize, pour plus d'info le MSDN ou google.

  9. #9
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2003
    Messages : 43
    Points : 57
    Points
    57
    Par défaut
    J'ai eu le même problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     XML := TXMLDocument.Create(nil);
    ne marche pas, il faut obligatoirement passé un autre argument que nil.

    J'utilise la fonction LoadXMLDocument et tout marche !

  10. #10
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    En effet, ça marche pas en mode console, des initialisations doivent sûrement être nécessaires.

    Essayer peut-être de trouver un autre composant.
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Merci à tous, et plus particulièrement à cpdump.
    Il fallait en fait faire appel à CoInitialize manuellement en incluant les librairies Windows et ActiveX :

    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
    uses
      SysUtils,
      xmldom,
      XMLIntf,
      msxmldom,
      XMLDoc,
      Windows,
      ActiveX;
     
    procedure tache;
    var
      ToDo : IXMLDocument;
    begin
      CoInitialize(nil);  
      ToDo := TXMLDocument.Create(nil);
      ToDo.LoadFromFile('D:\fic_pas\ToDo.xml');
      ToDo.Active := true;
     
    end;

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 298
    Points : 318
    Points
    318
    Par défaut
    En revanche, il faut peut être faire un CoUninitialize (je ne suis pas sûr du nom de la fonction) à la sortie du programme.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Creer un reseau local via l adsl
    Par loki dans le forum Développement
    Réponses: 11
    Dernier message: 12/08/2002, 00h14
  2. Redimensionnement des Paquets IP sur un Réseau Local
    Par Bonoboo dans le forum Développement
    Réponses: 2
    Dernier message: 12/07/2002, 15h40
  3. variables locales ou globales ???
    Par elvivo dans le forum C
    Réponses: 13
    Dernier message: 03/07/2002, 08h22
  4. Peux t'on créer une copie locale de l'objet partagé?
    Par Anonymous dans le forum CORBA
    Réponses: 8
    Dernier message: 16/04/2002, 16h20

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