2012-10-15 15 views
5

Kürzlich haben wir unseren Code von Delphi 2009 auf Delphi XE aktualisiert und unsere Indy-Komponenten aktualisiert (nicht sicher, ob dies relevant ist).Alternative zu TXMLDocument?

Aber seitdem hatten wir Fehler auf Windows Server 2003-Maschinen beim Laden und Speichern von XML-Dateien.

XMLDoc.LoadFromFile() 
XMLDoc.SaveToFile() 

The following is the error

Die DLL msvcrt.dll ist viel kleiner auf Windows Server 2003 (300kb oder so) im Vergleich zu über 600kb auf anderen Betriebssystemen ... So ist es etwas fehlt in dieser Datei und seine Verursachung der Fehler ...

Kann jemand das beheben? Oder gibt es eine Alternative zu TXMLDocument, die ich ausprobieren kann?

+1

werfen Sie einen Blick auf NativeXML oder OmniXML Parser – teran

+1

Haben Sie herausgefunden, warum diese Gleitkomma-bezogene Funktion referenziert wird? Klingt so, als müssten Sie einen qc-Bericht einreichen. –

+2

Das ist mir oft in Apps passiert, die von der Microsoft XML-Laufzeit abhängig sind. Eine alte Version von MS XML verursacht dies. Die Tatsache, dass Ihnen dies auf Windows 2003-Servern passiert, deutet darauf hin, dass Sie Ihre MS-XML-Datei dort überprüfen und aktualisieren sollten. Da diese Art von Mist mich verrückt macht, habe ich seitdem die gesamte Nutzung von MSXML entfernt und ich habe keine Sorgen mehr wegen MS XML. Ich benutze OmniXML. –

Antwort

3

Standardmäßig ist TXMLDocument/IXMLDocument nur ein Wrapper um die MSXML COM-Schnittstellen, wenn sie auf Windows-Plattformen ausgeführt werden. Weder TXMLDocument noch Indy verwenden die _ftol2_sse() Funktion oder sogar Link zu msvcrt.dll. Etwas anderes in deinem Projekt ist schuld.

+0

Okay, ich habe Show-Nachrichten verwendet, um herauszufinden, wo der Fehler auftritt und dieselbe Fehlermeldung wird sowohl in XMLDoc.LoadFromFile() als auch in XMLDoc.SaveToFile() angezeigt. Nun ist es möglich, dass dieser Fehler vor diesen Zeilen auftritt und sich erst dann nicht zeigt oder so? – Trevor

+0

Ich habe keinen Zugriff auf einen Windows 2003 Server, auf dem ich meinen Code debuggen kann. Hast du irgendwelche Tipps, wie ich herausfinden könnte, was _ftol2_sse anruft? – Trevor

+0

Okay, Ihr Recht, ich festgestellt, dass XMLDoc.LoadFromFile() XMLDoc.SaveToFile() nicht unbedingt die Ursache des Problems Ich habe eine wirklich harte Zeit herauszufinden, wo und warum dieses Problem auftritt. – Trevor

1

msvcrt.dll ist (Teil von) der Microsoft Visual C++ - Laufzeit. Ich denke, Sie haben eine ältere (oder vielleicht sogar neuere) Version dieser Laufzeitumgebung, die diese Funktion nicht enthält.

Jetzt müssen Sie herausfinden, wo diese Funktion aufgerufen wird. Verknüpfen Sie Obj-Dateien mit Ihrem Projekt oder verwenden Sie (andere) 3rd-Party-DLLs?

1

Um den letzten Teil zu beantworten ("gibt es eine Alternative?"), Sollten Sie sich die TJclSimpleXML Klasse der Jedi Code Library ansehen. Es benötigt keine externe DLL, ist ziemlich schnell und sehr einfach zu benutzen. Außerdem sind JCL und JVCL heutzutage ein Muss, wenn Sie in Delphi programmieren.

http://wiki.delphi-jedi.org/wiki/JEDI_Code_Library ist ihre Seite glaube ich. Ich höre in Seattle, Sie können es durch IDEs integrierten Paket-Manager bekommen.