„Ein Anruf an eine OS-Funktion fehlgeschlagen“ beim Laden von Windows-1252-XML-Datei
Frage
Edit:
Der Fehler war in der Tat in der Handhabung; parseError
versagt auch am den wirklichen Fehler zeigt; finden Sie unter Folgefrage für diesen Fehler .
Alt Frage:
Irgendwie manchmal unter dem Code generiert eine Ausnahme beim Laden der XML der msxml Einheit in Delphi XE verwenden. Es schlägt fehl, auf Windows XP Professional x86 SP3 mit MSXML6 und Windows 7 Ultimate x64 SP1 MSXML6 verwendet wird.
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 beschnitten, um die XML bis auf die XML wie folgt zu finden.
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 lädt völlig in Ordnung in .NET und anderen Umgebungen mit MSXML6 nicht).
- jeroen
Lösung
Wie Sie in sehen SysUtils.pas , dass Fehlermeldung ist derjenige, der gegeben ist, wenn GetLastError
Null zurückgibt. Die Dokumentation für IXmlDomDocument.load
nicht zu Anruf GetLastError
beraten, den Grund zu entdecken für das Scheitern. Der letztFehlerWert für Thread ist wahrscheinlich der Standard-Null-Wert.
Stattdessen untersucht das parseError
Wert des Dokumentobjekts. Es wird Ihnen eine IXmlDomParseError
Objekt, das Sie, wo und warum das Problem erzählt aufgetreten.