MSXML6参考似乎仍然可以在VB6应用程序中使用MSXML4

时间:2018-08-01 18:24:41

标签: com vb6 msxml

我在旧版VB6应用程序中引用了MSXML6(msxml6.dll)。无论我使用DOMDocument40还是DOMDocument60,我仍然看到msxml4.dll与msxml6.dll一起使用。但是,除了在解析小型配置的地方,我在项目中找不到其他应使用的东西。

为什么我看不到msxml4.dll,因为该项目未引用它? VB6是否将msxml4用于某些用途?

1 个答案:

答案 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 )不同。