在哪里可以找到EDOMParseError.ErrorCode
值列表?
我在 Delphi 源代码或 MSDN 中找不到它。
例如,如果我设置XMLDocument.FileName
为不正确的 url,我有
Error code: -2146697210
Reason: System error: -2146697210
这些代码是在哪里定义的?
在哪里可以找到EDOMParseError.ErrorCode
值列表?
我在 Delphi 源代码或 MSDN 中找不到它。
例如,如果我设置XMLDocument.FileName
为不正确的 url,我有
Error code: -2146697210
Reason: System error: -2146697210
这些代码是在哪里定义的?
当使用 MSXML 作为 DOM 提供程序时TXMLDocument
,该EDOMParseError.ErrorCode
值是一个 COMHRESULT
值(MSXML 被实现为 COM 对象)。没有记录所有可能HRESULT
值的单一来源。允许不同的模块定义自己的自定义HRESULT
值。
在这种情况下,-2146697210(十六进制 0x800C0006)是INET_E_OBJECT_NOT_FOUND
(找不到对象):
#define INET_E_OBJECT_NOT_FOUND _HRESULT_TYPEDEF_(0x800C0006L)
这转换为HRESULT
通过MAKE_HRESULT()
宏定义的,其严重性为SEVERITY_ERROR
,设施为FACILITY_INTERNET
,错误代码为 6:
#define INET_E_OBJECT_NOT_FOUND MAKE_HRESULT(SEVERITY_ERROR, FACILITY_INTERNET, 6)
此特定HESULT
值记录在URL Moniker Error Codes中。所有HRESULT
具有工具的值都FACILITY_INTERNET
属于 WinInet 库,其中包括 UrlMon 模块。MSXML 在内部使用 WinInet 下载远程内容。
如原因中所述,此错误来自您的系统。
SysErrorMessage(ErrorCode)
应该做你想做的。
仅当错误来自系统时才调用 SysErrorMessage。但现在你需要弄清楚如何知道这一点。像这样检查原因是可能的
if reason.StartsWith('System Error') then
errorMessage := SysErrorMessage(errorCode);
但这样做似乎很糟糕(是否取决于 Windows 语言设置?...)