"MSXML2.XMLHTTP60" 的后期绑定问题

Late Binding Issue with "MSXML2.XMLHTTP60"

当我尝试 运行 以下代码时出现 Run-time error '429': ActiveX component can't create object 错误。

Option Explicit

Private Sub EarlyVsLateBinding()

    ' References to both the Microsoft Scripting Runtime and Microsoft XML, v6.0 
    ' are active so that early binding is possible

    Dim EarlyDictionary As Scripting.Dictionary
    
    Dim LateDictionary As Object
    Set LateDictionary = CreateObject("Scripting.Dictionary")
    
    Dim EarlyHTTP As New MSXML2.XMLHTTP60
    
    Dim LateHTTP As Object
    Set LateHTTP = CreateObject("MSXML2.XMLHTTP60") ' Error is thrown here

End Sub

我已经包含了 Scripting.Dictionary 的示例,以说服自己 CreateObject 函数不会导致任何问题,并表明早期和晚期绑定对另一个 class.

遗憾的是,我遇到的每个 class 示例都使用早期绑定方法,但我需要此代码的后期绑定方法。此外,将行 Set LateHTTP = CreateObject("MSXML2.XMLHTTP60") 替换为 Set LateHTTP = GetObject(Class:="MSXML2.XMLHTTP60") 会产生相同的错误。

可能导致此错误的原因是什么?

正如@Raymon Wu 在问题的评论中指出的那样,更改行

Set LateHTTP = CreateObject("MSXML2.XMLHTTP60")

Set LateHTTP = CreateObject("MSXML2.XMLHTTP")

工作部分


编辑 1

或者,正如@KL-1 在评论中指出的那样,将行更改为

Set LateHTTP = CreateObject("MSXML.XMLHTTP.6.0")

问题也已解决。


此更改确实使我的问题运行中的代码没有错误。然而,这在后来的另一段代码中导致了另一个错误

LateHTTP.setRequestHeader bstrHeader:="Content-Type", bstrValue:="application/json"

这是 Run-time error '448': Named argument not found 错误。这是通过删除命名参数并将行更改为

来解决的

LateHTTP.setRequestHeader "Content-Type", "application/json"


编辑 1

请注意,这两种解决方案都会导致此 Run-time error '448'

正如其他人在评论中指出的那样,当绑定 类 时,使用早期和晚期时名称不一定相同。

后期绑定的名称可以在计算机的注册表编辑器中的 Computer\HKEY_CLASSES_ROOT 下找到。


我知道这超出了问题的范围,但我认为它是相关信息。