我有一个用Delphi6编写的程序,它使用TXMLDocument,运行时使用MSXML3.0解析器。但是该程序在一台计算机上报告一个The specified module could not be found错误,而过程监视器报告该程序试图访问MSXML4.0模块和注册表项。此4.0安装不完整/损坏,这就是访问The specified module could not be found失败的原因。
因此,核心问题是一些机制/决策算法,使TXMLDocument 无法使用当前所有Windows 10机器上的标准MSXML3.0或MSXML6.0版本,并迫使 TXMLDocument 使用MSXML4.0版本。TXMLDocument 中的决策机制是什么?如何纠正?
当然,我可以在客户端计算机上找到、下载并安装MSXML4.0,但这似乎不是正确的解决方案。
发布于 2021-11-16 09:25:52
这里没有神秘的魔法。众所周知,使用的是什么机制。您可以在Delphi的msxmldom.pas文件中看到自己的源代码。
当TXMLDocument在Windows上使用MSXML DOMVendor时,它只是在一个循环中调用CoCreateInstance(),试图实例化MSXML的IXMLDOMDocument COM对象的不同版本的硬编码列表,按版本的顺序递减,直到一个版本最终成功,或者它们都失败了。
当Delphi 6发布时,MSXML6.0还不存在,所以它不是尝试过的版本。你还说MSXML4.0在你客户的系统上坏了。因此,MSXML3.0最终被使用是有意义的。
关于如何使TXMLDocument在这样一个旧的Delphi版本中使用MSXML6.0,请看以下问题:
https://stackoverflow.com/questions/69985876
复制相似问题