2

我有一个使用 Delphi 6 编写的程序TXMLDocument,在运行时它使用 MS XML 3.0 解析器。但是该程序The specified module could not be found在一台计算机上报告错误,并且Process Monitor报告该程序正在尝试访问 MS XML 4.0 模块和注册表项。此 4.0 安装不完整/已损坏,这就是访问失败并显示The specified module could not be found.

因此,核心问题是一些机制/决策算法,它TXMLDocument从使用当前所有 Windows 10 机器上的标准 MS XML 3.0 或 MS XML 6.0 版本TXMLDocument转向使用 MS XML 4.0 版本。这个决策机制是什么TXMLDocument以及如何纠正它?

当然,我可以在客户端计算机上找到、下载和安装 MS XML 4.0,但这似乎不是正确的解决方案。

4

1 回答 1

3

这里没有秘密魔法。使用什么机制是众所周知的。msxmldom.pas您可以在 Delphi 的文件中查看自己的源代码。

在Windows 上TXMLDocument使用 MSXMLDOMVendor时,它只是简单地调用CoCreateInstance()一个循环来尝试实例化 MSXML 的IXMLDOMDocumentCOM 对象的不同版本的硬编码列表,按版本降序排列,直到一个版本最终成功,或者它们都失败。

在 Delphi 6 发布时 MSXML 6.0 还不存在,所以它不是一个尝试的版本。你说 MSXML 4.0 在你客户的系统上被破坏了。因此,为什么最终使用 MSXML 3.0 是有道理的。

请查看以下问题,了解如何TXMLDocument在如此旧的 Delphi 版本中使用 MSXML 6.0:

如何在 Delphi 7 中使用 MSXML 6.0 创建 TXML 文档?

于 2021-11-16T09:25:52.120 回答