EDOM ParseError 错误代码列表

EDOMParseError ErrorCode list

在哪里可以找到 EDOMParseError.ErrorCode 值的列表?

我无法在 Delphi 源代码或 MSDN 中找到它。

例如,如果我将 XMLDocument.FileName 设置为不正确的 url,我得到

Error code: -2146697210
Reason:  System error: -2146697210

这些代码是在哪里定义的?

如原因中所述,此错误来自您的系统。

SysErrorMessage(ErrorCode)

应该做你想做的。

仅当错误来自系统时才调用 SysErrorMessage。但现在你需要弄清楚如何知道这一点。可以这样检查原因

if reason.StartsWith('System Error') then
    errorMessage := SysErrorMessage(errorCode);

但这样做似乎不太好(是否取决于 Windows 语言设置?...)

当使用 MSXML 作为 TXMLDocument 的 DOM 提供程序时,EDOMParseError.ErrorCode 值是一个 COM HRESULT 值(MSXML 作为 COM 对象实现)。没有单一来源记录所有可能的 HRESULT 值。允许不同的模块定义自己的自定义 HRESULT 值。

在这种情况下,-2146697210(十六进制 0x800C0006)是 INET_E_OBJECT_NOT_FOUND(未找到对象):

#define INET_E_OBJECT_NOT_FOUND          _HRESULT_TYPEDEF_(0x800C0006L)      

这转换为通过 MAKE_HRESULT() 宏定义的 HRESULT,严重性为 SEVERITY_ERROR,设施为 FACILITY_INTERNET,错误代码为 6:

#define INET_E_OBJECT_NOT_FOUND          MAKE_HRESULT(SEVERITY_ERROR, FACILITY_INTERNET, 6)

这个特定的 HESULT 值记录在 URL Moniker Error Codes 中。所有具有 FACILITY_INTERNET 设施的 HRESULT 值都属于 WinInet 库,其中包括 UrlMon 模块。 MSXML 在内部使用 WinInet 下载远程内容。