Edit:"Ein Aufruf zu einer OS-Funktion ist fehlgeschlagen", wenn Windows-1252-XML-Datei geladen
Der Fehler war in der Tat in der Handhabung; parseError
schlägt auch fehl und zeigt den wirklichen Fehler; Für diesen Fehler siehe follow-up question.
Alte Frage:
Irgendwie manchmal unterhalb der Code erzeugt eine Ausnahme, wenn XML Laden der msxml Einheit in Delphi XE verwenden. Es schlägt unter Windows XP Professional x86 SP3 mit MSXML6 und Windows 7 Ultimate x64 SP1 mit MSXML6 fehl.
procedure TXMLEOSErrorTestCase.Test;
var
XmlDocument: IXMLDOMDocument3;
XmlFileName: string;
begin
XmlDocument := CoFreeThreadedDOMDocument60.Create();
XmlFileName := TPath.Combine(TPath.GetDirectoryName(ParamStr(0)), '1-Normal.xml');
if not XmlDocument.load(XmlFileName) then
RaiseLastOSError();
end;
Dieser Fehler tritt bei der XmlDocument.Load Methode:
EOSError at $00423B2D
A call to an OS function failed
ich die XML in die XML wie folgt zu finden abgespeckte.
Dies ist der Hex-Dump der XML-Datei:
000000: 3C 3F 78 6D 6C 20 76 65 72 73 69 6F 6E 20 3D 20 <?xml version =
000010: 22 31 2E 30 22 20 65 6E 63 6F 64 69 6E 67 3D 22 "1.0" encoding="
000020: 57 69 6E 64 6F 77 73 2D 31 32 35 32 22 3F 3E 3C Windows-1252"?><
000030: 52 4F 57 20 43 69 74 79 3D 22 E0 22 2F 3E 0D 0A ROW City="."/>..
Dies ist der XML:
<?xml version = "1.0" encoding="Windows-1252"?><ROW City="à"/>
Warum tritt der Fehler auf?
(Die XML-Dateien werden in .NET und anderen Umgebungen, in denen MSXML6 nicht verwendet wird, problemlos geladen.)
--jeroen
Tritt der Fehler wirklich * während * der 'load' Methode auf, oder tritt die von Ihnen angegebene Ausnahme tatsächlich auf, weil * Sie *' RaiseLastOSError' genannt haben? Ich vermute Letzteres. –