2012-11-29 84 views
0

我有一个设备相关的VBScript问题。下面的代码甚至不应该在i = playercount之后执行,但它确实会执行。阵列超出范围?

Do Until i = playercount 

    If i = playercount then 
     Exit Do 
    end if 

    Select Case True 
     Case i >=1 And i <= 4 
      'usb hubs 1-4 
      'b = i + 1 
      If pluggedindev(4) = False Then 

        msgbox(i) 
        msgbox(playercount) 
        Set ExtHubPort(i) = ExtHub(1).Ports(i) 
        Wscript.Sleep 2000 
        ExtHubPort(i).HotPlug GenericHIDDSFDev(i) 
        WScript.Sleep 10000 
        pluggedindev(i) = True 
        MsgBox("usb device (ports 1-4)") 
      'else if playercount <= 4 then 
        'Exit Do 
      End If 

     Case i >=5 And i <= 8 
      'usb hubs 5-8 
      Wscript.sleep 2000 

      For b = 1 To 4 
       Set ExtHubPort(i) = ExtHub(2).Ports(b) 
       Wscript.sleep 2000 
       ExtHubPort(i).HotPlug GenericHIDDSFDev(i) 
       WScript.Sleep 10000 
       'Log("Usb devices 1 through 4 set") 
      Next 

      'usb hubs 9-12 
     Case i >=9 And i <= 12 
      For b = 1 To 4 
      Set ExtHubPort(i) = ExtHub(3).Ports(b) 
       Wscript.sleep 2000 
       ExtHubPort(i).HotPlug GenericHIDDSFDev(i) 
       WScript.Sleep 10000 
      Next 
      'usb hubs 13-16 
     Case i >=13 And i <= 16 
      For b = 1 To 4 
       Set ExtHubPort(i) = ExtHub(4).Ports(b) 
       Wscript.sleep 2000 
       ExtHubPort(i).HotPlug GenericHIDDSFDev(i) 
       WScript.Sleep 10000 
      Next 
     'usb hubs 17-20 
     Case i >=17 And i <=20 
      For b = 1 To 4 
       Set ExtHubPort(i) = ExtHub(5).Ports(b) 
       Wscript.sleep 2000 
       ExtHubPort(i).HotPlug GenericHIDDSFDev(i) 
       WScript.Sleep 10000 
      Next 
    End Select 

    i = i + 1 

Loop 

任何人都看一看,看看为什么? 看来,我的下标超出范围并导致问题,但显然上面的代码应该工作。

+0

'i'和'playercount'是什么初始化的? – 2012-11-30 08:56:19

+0

playercount的测试值为4,并继续进入5而不是停止。也许计数器在到达4时不断增加? – jeffery

回答

0

我想出了关于I或playercount价值的评论是正确的。我通过在循环结束时将此代码解决,迫使计数器在到达playercount之前停止(它停在4?)。变量我只是继续上去,因为我的if和其他语句没有正确使用。感谢所有帮助过的人。

If i = playercount then 
Exit Do 
elseif i < playercount then 
i = i + 1 
End If 
1

我的猜测是你的playercount为0(零),并初始化为1(one)。 i = playercount条件将永远不会被满足,当它进入原始循环的第二次迭代时,会出现错误。

对于首发,缩短你的代码是这样的:

' Let ExtHubPort(1 to playercount) reference to 
'  ExtHub(1 to playercount/4).Ports(1 to 4) 
For i = 0 to playercount - 1 
    Set ExtHubPort(i+1) = ExtHub(int(i/4)+1).Ports((i mod 4) + 1) 
    Wscript.sleep 2000 
    ExtHubPort(i+1).HotPlug GenericHIDDSFDev(i+1) 
    WScript.Sleep 10000 
Next 

现在很容易看到它是怎么了循环的哪一部分。

+0

我放了一个消息框来显示我和玩家的数量。但是在i = playercount之后它继续下去,不应该。 – jeffery

+0

ExtHub(hubnumber).Ports(集线器上的特定端口号) – jeffery

+0

我将尝试代码,但ExtHub可以从0开始,但端口必须是1到4的值,因为我无法弄清楚如何使虚拟usb集线器支持更多端口。 – jeffery