![]() |
Re: Systemvorausetzungen von XML?
So
Hab mir des jetzt mal alles angeschaut doch am sympatischen ist mir OmniXML. Also hab ich des mir mal eingebunden und ein bissi getestet aber schon bei diesem Code scheitert alles:
Delphi-Quellcode:
---------------------------
function XML_Load(XMLFilename : String; VST : TVirtualStringTree) : Boolean;
var XMLDocument : TXMLDocument; begin try XMLDocument := TXMLDocument.Create; try try if not(FileExists(XMLFilename)) then begin XMLDocument.LoadXML('<?xml version="1.0"?><List></List>'); //hier end else XMLDocument.Load(XMLFilename); //oder hier gibt es eine AccessViolation (siehe unten) except ShowMessage('XML Fehler: Die Datei "'+XMLFilename+'" ist fehlerhaft.'); Result := false; exit; end; VST.Clear; VST.BeginUpdate; ShowMessage(XMLDocument.DocumentElement.NodeName); VST.EndUpdate; finally FreeAndNil(XMLDocument); //und hier kann er es nicht freigeben weil des objekt plötzlich nicht mehr verfügbar ist (wieder AccessViolation) end; Result := true; except ShowMessage('XML Fehler: Fehler beim Laden des XML Documents'); Result := false; end; end; Benachrichtigung über Debugger-Exception --------------------------- Im Projekt - ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 7C911010 in Modul 'ntdll.dll'. Lesen von Adresse 0000001C' aufgetreten. --------------------------- Anhalten Fortsetzen Hilfe --------------------------- |
Re: Systemvorausetzungen von XML?
Also auf den ersten Blick würd ich sagen, dass Du Deine Variable vom Typ IXMLDocument, nicht TXMLDocument deklarieren solltest, weil sonst wired das Ding gleich nach dem Konstruieren wieder freigegeben. Als zweites fällt auf, dass Du das Dokument vor dem einlesen nicht aktiv machst (aber das würde eine andere Ausnahme erzeugen). Falls OmniXML nicht mit interfaces arbeitet, vergiss meinen Post.
|
Re: Systemvorausetzungen von XML?
also wenn ich es so mache XMLDocument : IXMLDocument;
dann gibt es kein XMLDocument := IXMLDocument.Create; ich kann es höchstens so machen XMLDocument := TXMLDocument.Create; dann geht es zwar mal anscheinend ... aber ich kanns nicht freigeben und warum wird das TXMLDocument objekt gleich nach dem konstruieren wieder freigegeben? |
Re: Systemvorausetzungen von XML?
Zitat:
Du solltest die Funktion CreateXMLDoc aus Unit OmniXML verwenden. Eigentlich hätten die Leute von OmniXML die Klasse TXMLDocument nach dem Keywort "implementation" deklarieren müssen, damit man gar nicht diesen Fehler machen kann. Ich habe auch gleich mal deine schlechte Exception-Behandlung berichtigt und aus der function eine procedure gemacht. Entweder die procedure läuft erfolgreich durch oder es wird eine Exception mit aussagekräftiger Fehlermeldung erzeugt.
Delphi-Quellcode:
procedure XML_Load(XMLFilename : String; VST : TVirtualStringTree);
var XMLDocument : IXMLDocument; // <=== Interface !! begin XMLDocument := CreateXMLDoc; try if FileExists(XMLFilename) then XMLDocument.Load(XMLFilename) else XMLDocument.LoadXML('<?xml version="1.0"?><List></List>'); except on E:Exception do begin E.Message := 'XML Fehler beim Laden der Datei "'+XMLFilename+'"'#13#10+ E.Message; raise; end; end; VST.Clear; VST.BeginUpdate; ShowMessage(XMLDocument.DocumentElement.NodeName); VST.EndUpdate; end; |
Re: Systemvorausetzungen von XML?
Hi danke für deine Hilfe jetzt läuft es schon ganz gut
aber mein Memory Manager sagt mir am schluß des ich jetzt speicherleaks habe. Wie kann ich des jetzt freigeben des objekt? |
Re: Systemvorausetzungen von XML?
*push*
|
Re: Systemvorausetzungen von XML?
Zitat:
Hellsehen können wir auch nicht wo jetzt genau die Lücken sind. |
Re: Systemvorausetzungen von XML?
ah leute hat sich erledigt
meine dummheit war schuld hab unten noch einen anderen code kapt zum speichern und da war alles bis aufs erstellen des documents auskommentiert ... naja danke auf jedenfall jetzt läufts prima :zwinker: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz