Vb6 Array()函数的行为是否已更改?

Vb6 Array()函数的行为是否已更改?,vb6,Vb6,我在一些旧的VB6代码中遇到了一个问题,它似乎与通过使用空参数列表调用array()函数来创建空数组有关 指示这是合法操作: 所需的arglist参数是以逗号分隔的值列表,这些值 指定给包含在 变体。如果未指定参数,则将创建长度为零的数组 创造 导致错误的函数的骨架如下所示 函数创建一个空数组,向数组中添加零个或多个元素,然后将其返回给调用方。 在这种特殊情况下,它不会向数组中添加任何元素,因此会尝试返回空数组 Private Function GetActiveRestrictionArray

我在一些旧的VB6代码中遇到了一个问题,它似乎与通过使用空参数列表调用array()函数来创建空数组有关

指示这是合法操作:

所需的arglist参数是以逗号分隔的值列表,这些值 指定给包含在 变体。如果未指定参数,则将创建长度为零的数组 创造

导致错误的函数的骨架如下所示

函数创建一个空数组,向数组中添加零个或多个元素,然后将其返回给调用方。 在这种特殊情况下,它不会向数组中添加任何元素,因此会尝试返回空数组

Private Function GetActiveRestrictionArray(ByVal Restrictions As String) As Variant

  Dim Result As Variant

  Result = Array()

  'Do some stuff which might call "Redim"
  'but in this case does not.

  GetActiveRestrictionArray = Result

End Function
行GetActiveRestrictionArray=Result现在生成错误“无效的过程调用或参数”

用户报告在执行Windows更新后,此错误在Windows 10下发生。同一用户报告说,如果他恢复此更新,则错误消失。我不知道那是什么更新

但是,我现在可以在运行Windows7的虚拟机上的VB6中生成相同的错误

事实上,在Result=Array()行之后,如果我将鼠标放在变量Result上,它会显示消息“Invalid procedure call or argument”作为工具提示(在本例中为德语)

老实说,我不知道这段代码是如何工作的,但很明显它确实工作了


VB6 Array()函数的行为是否可能已更改,特别是在使用空参数列表调用该函数时?

这可能是由Microsoft 2019年8月的修补程序引起的。微软发布了一些额外的更新,在一些Windows版本上解决了这一问题

见:

后续更新:

Windows 7 x64:

Windows 10 1709版:


Windows 10版本1809:

KB4512941为我修复了此问题,从昨天起可通过Windows update获得,需要15分钟并重新启动-另请参阅