![]() |
XML Objekte Freigeben
Hallo.
Ich habe folgenden Code, der mir einen XML-String generieren soll:
Delphi-Quellcode:
Mein Problem ist die Zeile mit dem FreeAndNil. Hier kommt es zu einer Zugriffsverletzung.
function TGpn2Xml.getXML() : String;
var xml : TXMLDocument; node : IXMLNode; begin xml := TXMLDocument.Create(nil); xml.Active := true; node := xml.AddChild('Wurzelelement'); xml.DocumentElement := node; // Hier werden später noch mehr XML-Daten eingefügt result := xml.XML.GetText; FreeAndNil(xml); // ??? end; Warum? Was ist mit dem Interface node. Muss dieses auch freigegeben werden? Besten Dank SandStein |
Re: XML Objekte Freigeben
Warum nimmst du kein IXmlDocument und vergisst Free() einfach?
Wenn du es wirklich so machen willst, dann solltest du node auf nil setzen, bevor du das Dokument freigibst. Eine Interfacereferenz auf nil setzen ist das gleiche, als ob du die Methode verlässt: Der Referenzzähler wird um 1 reduziert. Hättest du beide einfach als Interfaces müsstest du gar nix beachten. :zwinker: |
Re: XML Objekte Freigeben
Besten Dank :thumb:
Statt ein Objekt zu erschaffen, benutze ich jetzt das Interface und weise ihm am Anfang xml := newXMLDocument; zu. Mal wieder was dazugelernt. Danke! |
AW: XML Objekte Freigeben
Hallo ich habe ein ähnliches Problem. Ich verwende meinen XML-Aufruf in einer Unit.
Und wollte eigentlich die Instanz immer lokal erstellen und wieder freigeben, was ja bekanntlich nicht geht. Da ich die Funtkion zyklisch aufrufe läuft mein Speicher voll.
Delphi-Quellcode:
Die Lösung
function XMLLesen(PfadXML: String): Integer;
var Daten: IXMLWinCosJobType; XMLDoc : TXMLDocument; begin try XMLDoc := TXMLDocument.Create(nil); XMLDoc.LoadFromFile(Pfad); Daten := GetWinCosJob(XMLDoc); finally XMLDoc .Free // geht bekanntlich nicht end; Zitat:
Was ist damit gemeint? |
AW: XML Objekte Freigeben
Genau was dort steht:
Deine Zeile
Delphi-Quellcode:
wird zu
XMLDoc := TXMLDocument.Create(nil);
Delphi-Quellcode:
Und den Try-Block mitsamt seinem finally und
XMLDoc := NewXMLDocument();
Delphi-Quellcode:
entfernst du. Fertig.
XmlDoc.Free()
Wenn die Methode verlassen wird, wird deine
Delphi-Quellcode:
-Instanz automatisch freigegeben.
IXMLDocument
|
AW: XML Objekte Freigeben
Vielen Dank!!! Stand auf dem Schlauch :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21: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