我在旧版VB6应用程序中引用了MSXML6(msxml6.dll)。无论我使用DOMDocument40还是DOMDocument60,我仍然看到msxml4.dll与msxml6.dll一起使用。但是,除了在解析小型配置的地方,我在项目中找不到其他应使用的东西。
为什么我看不到msxml4.dll,因为该项目未引用它? VB6是否将msxml4用于某些用途?
答案 0 :(得分:1)
MSXML6在其COM实现中似乎是MSXML4的新版本,而不仅仅是作为“营销”版本号。
在OLEView中查看两者的IDL,您可以看到此...这里是一些示例。
MSXML4:
// Generated .IDL file (by the OLE/COM Object Viewer)
//
// typelib filename: msxml4.dll
[
uuid(F5078F18-C551-11D3-89B9-0000F81FE221),
version(4.0),
helpstring("Microsoft XML, v4.0")
]
library MSXML2
{
...
}
[
odl,
uuid(2933BF80-7B36-11D2-B20E-00C04F983E60),
helpstring("Core DOM node interface"),
dual,
nonextensible,
oleautomation
]
interface IXMLDOMNode : IDispatch {
...
}
MSXML6:
// Generated .IDL file (by the OLE/COM Object Viewer)
//
// typelib filename: msxml6.dll
[
uuid(F5078F18-C551-11D3-89B9-0000F81FE221),
version(6.0),
helpstring("Microsoft XML, v6.0")
]
library MSXML2
{
...
}
[
odl,
uuid(2933BF80-7B36-11D2-B20E-00C04F983E60),
helpstring("Core DOM node interface"),
dual,
nonextensible,
oleautomation
]
interface IXMLDOMNode : IDispatch {
...
}
这些只是简短的示例。
具体来说,您可以看到库本身的UUID和接口是相同的。这意味着VB6能够从任一DLL使用这些项目。
如果您需要强制它使用MSXML6,那么我认为您需要更新项目的VBP文件中的版本号。
如果您的项目引用了MSXML4,您应该会看到如下一行:
Reference=*\G{F5078F18-C551-11D3-89B9-0000F81FE221}#4.0#0#..\..\..\Windows\SysWow64\msxml4.dll#Microsoft XML, v4.0
您想要的是这样的一行:
Reference=*\G{F5078F18-C551-11D3-89B9-0000F81FE221}#6.0#0#..\..\..\WINDOWS\System32\msxml6.dll#Microsoft XML, v6.0
UUID相同...但是版本号( #6.0
)不同。