Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi XML-Dateien lesen mit TXMLDocument (https://www.delphipraxis.net/130821-xml-dateien-lesen-mit-txmldocument.html)

Burgwächter 13. Mär 2009 17:59


XML-Dateien lesen mit TXMLDocument
 
Hallo,
nachdem ich schon sehr viele meiner Probleme mit Hilfe des Forums lösen konnte, erst einmal Danke an alle die hier Ihr Wissen teilen.
Heute habe ich jedoch ein Prob, dass ich nicht finden kann.

Ich möchte eine XML-Datei einlesen, mein Code funkt wenn ich Ihn in einem einzelnen Projekt starte.
Wenn Ihn jedoch in einem Thread starte bekomme ich folgende Exception:

...EInvalidPointer mit Meldung 'Ungültige Zeigeroperation'.

Wenn ich die Maus über die beTreffende Zeile im Debugmodus halte bekomme ich :Privilegierte Instruktion bei 0125D204

Delphi-Quellcode:
VAR
  Files        : TStrings;
  aFile        : String;
  XML          : TXMLDocument;
  RootNode     : IXMLNode;
  Node         : IXMLNode;
.....
    if not DoNothing then Begin
      XML := TXMLDocument.Create('c:\xml\out\bb3.xml');
      for i := 0 to Files.Count -1 do begin
        //XML.LoadFromFile(a);
        xml.Active:=True;
        RootNode := xml.DocumentElement;
....
auch mit folgender Version bekomme ich den selben Fehler.
Delphi-Quellcode:
.....
    aFile:='C:\xml\out\bb3.xml';
    if not DoNothing then Begin
      XML := TXMLDocument.Create(nil);
      for i := 0 to Files.Count -1 do begin
        XML.LoadFromFile(aFile);
        xml.Active:=True;
        RootNode := xml.DocumentElement;
....
Statt xml.DocumentElement habe ich auch schon xml.childnodes['Params'] getestet.

--> übrigens das Schreiben eine XML-Datei klappt auch im Thread.

Gruß
Ralf

himitsu 13. Mär 2009 18:22

Re: XML-Dateien lesen mit TXMLDocument
 
Führe vorher mal MSDN-Library durchsuchenCoInitialize im entsprechenden Thread aus und initialisiere sozusagen erstmal die COM-Objekte

Hier im Forum suchenTXMLDocument CoInitialize

Burgwächter 13. Mär 2009 21:24

Re: XML-Dateien lesen mit TXMLDocument
 
Hi,

ein
CoInitialize(nil);

ist schon in der EXECUTE procedure enthalten, ist es nötig in jeder weiteren procedure ein CoInitialize zu starten?

Leider bekomme ich auch beim Test mit CoInitialize in dieser procedure den selben Fehler wie zuvor.

Gruß
Ralf

Namenloser 13. Mär 2009 23:07

Re: XML-Dateien lesen mit TXMLDocument
 
Ersetze mal alle Klassen durch Interfaces. Alle Probleme mit TXMLDocument rührten bei mir bisher daher, dass ihc Klassen und Interfaces vermischt habe. Warum das nicht funktioniert steht auf einem anderen Blatt...

Edit: Ich sehe gerade es geht um Threads... dann liegt es wahrscheinlich an etwas anderem, wenn es sonst funktioniert, sorry.

Burgwächter 14. Mär 2009 09:48

Re: XML-Dateien lesen mit TXMLDocument
 
Ja, ich denke auch es muss etwas mit Threading zu tun haben, denn wie gesagt, wenn ich die procedure in einem Test in einem eigenen vcl setze klappt es. Was mir zu denken gibt ist : Privilegierte Instruktion bei 0125D204 . Leider bin ich Anfänger (3Monate) und komme einfach nicht weiter. :wall: :wall:
Hat noch jem. eine Idee? oder sollte ich auf eine andere Möglichkeit zum lesen von XML umsteigen?
Ich fand nur TXMLDocument sieht recht einfach aus.
Gruß
Ralf

mjustin 14. Mär 2009 12:35

Re: XML-Dateien lesen mit TXMLDocument
 
Zitat:

Zitat von Burgwächter
Hat noch jem. eine Idee? oder sollte ich auf eine andere Möglichkeit zum lesen von XML umsteigen?

Auf jeden Fall das hier nicht vergessen:

Delphi-Quellcode:
XML          : IXMLDocument;
(statt TXMLDocument), böse Fehler und Abstürze sind sonst möglich.

Und für jeden Thread einen eigene Instanz von IXMLDocument verwenden.

Burgwächter 16. Mär 2009 08:49

Re: XML-Dateien lesen mit TXMLDocument
 
Hallo,

Hm, dass mit IXMLDOKUMENT habe ich versucht, dann bekomme ich eine Zugriffsverletzung, beim laden der XML-Datei. :( :(

Diesmal habe ich das Problem auch wenn ich mir in einer TEST.pas einen Klickbutton mit dem Laden versehe, und nicht nur im Thread. Scheinbar habe ich die Tomaten vom Freitag immer noch auf den Augen. grrr was mache ich jetzt schon wieder falsch...
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
VAR
  lXML : iXMLDocument;
  Node : IXMLNode;
  RootNode : IXMLNode;

begin
    lxml.LoadFromFile('c:\XML\out\Test.xml');
    lxml.Active:=true;
//    RootNode:= lXML.DocumentElement;
    RootNode := lXML.ChildNodes['Params'];
    Node:= Rootnode.ChildNodes['UserInfos'];
    showmessage(Node.ChildNodes['Login'].Text);
    lxml:=nil;
end;
Sollte man grundsätzlich auf TXMLDocument verzichten?

Gruß
Ralf

Burgwächter 16. Mär 2009 09:09

Re: XML-Dateien lesen mit TXMLDocument
 
:wall: :wall: :wall:

okok manchmal hilft einfach mal 100 durch 7 teilen.... natürlich von Hand, bis auf mind. 20 Stellen nach dem Komma...
egal wie, Hauptsache man denkt mal an was anderes!

Delphi-Quellcode:
lXML := TXMLDocument.Create(nil) as iXMLDocument;
Danke an ALLE die mir geholfen haben.

--> Aber, ist es erlaubt TXMLDocument mit nil aufzurufen?

Gruß
Ralf

sirius 16. Mär 2009 09:43

Re: XML-Dateien lesen mit TXMLDocument
 
Zitat:

Zitat von Burgwächter
--> Aber, ist es erlaubt TXMLDocument mit nil aufzurufen?

Ja klar. Wenn es keinen Owner gibt. Das ist doch nur Comfort für dich beim Programmieren auf den du hier verzichtest (Den du aber auch nicht verwendest).

Namenloser 16. Mär 2009 13:23

Re: XML-Dateien lesen mit TXMLDocument
 
Zitat:

Zitat von Burgwächter
:wall: :wall: :wall:

okok manchmal hilft einfach mal 100 durch 7 teilen.... natürlich von Hand, bis auf mind. 20 Stellen nach dem Komma...
egal wie, Hauptsache man denkt mal an was anderes!

Delphi-Quellcode:
lXML := TXMLDocument.Create(nil) as iXMLDocument;
Danke an ALLE die mir geholfen haben.

--> Aber, ist es erlaubt TXMLDocument mit nil aufzurufen?

Gruß
Ralf

Delphi-Quellcode:
 as iXMLDocument
kannst du dir imo sparen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz