"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 下找到。
我知道这超出了问题的范围,但我认为它是相关信息。
当我尝试 运行 以下代码时出现 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 下找到。
我知道这超出了问题的范围,但我认为它是相关信息。