Delphi 的 TXMLDocument 如何决定使用哪个 MS XML 版本(3.0、6.0 甚至 4.0)?
How does Delphi's TXMLDocument decide which MS XML version (3.0, 6.0 or even 4.0) to use?
我有一个用 Delphi 6 编写的程序,它使用 TXMLDocument
,并且在运行时它使用 MS XML 3.0 解析器。但是该程序在一台计算机上报告 The specified module could not be found
错误,并且 Process Monitor 报告该程序正在尝试访问 MS XML 4.0 模块和注册表项。此 4.0 安装是 incomplete/corrupted,这就是访问失败并显示 The specified module could not be found
的原因。
所以,核心问题是一些 mechanism/decision 算法转移 TXMLDocument
使用标准 MS XML 3.0 或 MS XML 6.0 版本在所有当前 Windows 10 机器上,并且按 TXMLDocument
以使用 MS XML 4.0 版本。 TXMLDocument
中的这个决策机制是什么以及如何纠正它?
当然,我可以在客户端计算机上找到、下载并安装 MS XML 4.0,但这似乎不是正确的解决方案。
这里没有秘密魔法。使用什么机制是众所周知的。您可以在 Delphi 的 msxmldom.pas
文件中查看自己的源代码。
当 TXMLDocument
在 Windows 上使用 MSXML DOMVendor
时,它只是在循环中调用 CoCreateInstance()
以尝试实例化不同版本 MSXML 的硬编码列表IXMLDOMDocument
COM 对象,按版本降序排列,直到一个版本最终成功,否则全部失败。
MSXML 6.0 在 Delphi 6 发布时还不存在,因此它不是尝试的版本。你说 MSXML 4.0 在你客户的系统上坏了。所以最终改用 MSXML 3.0 是有道理的。
请查看以下问题,了解如何使 TXMLDocument
在如此旧的 Delphi 版本中使用 MSXML 6.0:
How to create a TXML Document using MSXML 6.0 in Delphi 7?
我有一个用 Delphi 6 编写的程序,它使用 TXMLDocument
,并且在运行时它使用 MS XML 3.0 解析器。但是该程序在一台计算机上报告 The specified module could not be found
错误,并且 Process Monitor 报告该程序正在尝试访问 MS XML 4.0 模块和注册表项。此 4.0 安装是 incomplete/corrupted,这就是访问失败并显示 The specified module could not be found
的原因。
所以,核心问题是一些 mechanism/decision 算法转移 TXMLDocument
使用标准 MS XML 3.0 或 MS XML 6.0 版本在所有当前 Windows 10 机器上,并且按 TXMLDocument
以使用 MS XML 4.0 版本。 TXMLDocument
中的这个决策机制是什么以及如何纠正它?
当然,我可以在客户端计算机上找到、下载并安装 MS XML 4.0,但这似乎不是正确的解决方案。
这里没有秘密魔法。使用什么机制是众所周知的。您可以在 Delphi 的 msxmldom.pas
文件中查看自己的源代码。
当 TXMLDocument
在 Windows 上使用 MSXML DOMVendor
时,它只是在循环中调用 CoCreateInstance()
以尝试实例化不同版本 MSXML 的硬编码列表IXMLDOMDocument
COM 对象,按版本降序排列,直到一个版本最终成功,否则全部失败。
MSXML 6.0 在 Delphi 6 发布时还不存在,因此它不是尝试的版本。你说 MSXML 4.0 在你客户的系统上坏了。所以最终改用 MSXML 3.0 是有道理的。
请查看以下问题,了解如何使 TXMLDocument
在如此旧的 Delphi 版本中使用 MSXML 6.0:
How to create a TXML Document using MSXML 6.0 in Delphi 7?