我在一些旧的VB6代码中存在问题,这似乎与通过使用空参数列表调用Array()函数来创建空数组有关。
help for VBA表示这是合法操作:
必需的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下会发生此错误。该用户报告说,如果他还原此更新,则错误消失。我不知道那是什么更新。
但是,我现在可以在运行Windows 7的虚拟机上的VB6中生成相同的错误。
实际上,在Result = Array()行之后,如果我将鼠标悬停在变量Result上,则会在工具提示中显示消息“无效的过程调用或参数”(在这种情况下为德语)。
老实说,我不知道这段代码是如何工作的,但是显然可以。
VB6 Array()函数的行为是否可能已更改,特别是在使用空参数列表调用时?
答案 0 :(得分:3)
这可能是由Microsoft的2019年8月补丁引起的。 MS已发布了一些其他更新,以解决某些Windows版本上的此问题。
请参阅:
https://docs.microsoft.com/en-us/windows/release-information/status-windows-10-1903#629msgdesc
https://support.microsoft.com/en-us/help/4512508/windows-10-update-kb4512508
https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2019-1182
后续更新:
Windows 7 x64:https://support.microsoft.com/en-us/help/4517297/windows-7-update-kb4517297
Windows 10版本1709:https://support.microsoft.com/en-us/help/4512494/windows-10-update-kb4512494
Windows 10版本1809:https://support.microsoft.com/en-us/help/4512534