簡體   English   中英

加載Windows-1252 XML文件時,“對OS函數的調用失敗”

[英]“A call to an OS function failed” when loading Windows-1252 XML file

編輯:

錯誤的確在處理上。 parseError也會失敗並顯示真實錯誤; 有關該錯誤,請參見后續問題

舊問題:

有時,以下代碼有時會在Delphi XE中使用msxml單元加載XML時生成異常。 在使用MSXML6的Windows XP Professional x86 SP3和使用MSXML6的Windows 7 Ultimate x64 SP1上,此操作失敗。

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;

XmlDocument.load方法期間發生此錯誤:

EOSError at  $00423B2D
A call to an OS function failed

我將XML縮減為下面的XML。

這是XML文件的十六進制轉儲:

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="."/>..

這是XML:

<?xml version = "1.0" encoding="Windows-1252"?><ROW City="à"/>

為什么會發生錯誤?

(XML可以在.NET和其他不使用MSXML6的環境中很好地加載)。

--jeroen

正如您在SysUtils.pas中看到的那樣,該錯誤消息是GetLastError返回零時給出的錯誤消息。 IXmlDomDocument.load文檔不建議您調用GetLastError來發現失敗的原因。 您線程的上一個錯誤值可能是默認的零值。

而是,檢查文檔對象的parseError值。 它將為您提供一個IXmlDomParseError對象,該對象告訴您問題發生的位置和原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM