在VB6中指定变量时,何时使用括号,何时不使用括号?

在VB6中指定变量时,何时使用括号,何时不使用括号?,vb6,Vb6,我正在看一些旧的VB6代码。我是VB新手,有C/Java背景,所以我不理解一些赋值语句。这里有一个例子- Private Type UGH Rsp(3) As Byte ProgramId(7) As Byte RID(7) As Byte TID(3) As Byte FL(39) As Byte End Type Private UHeader As UGH 随后,转让按如下方式进行:

我正在看一些旧的VB6代码。我是VB新手,有C/Java背景,所以我不理解一些赋值语句。这里有一个例子-

     Private Type UGH
       Rsp(3) As Byte
       ProgramId(7) As Byte
       RID(7) As Byte
       TID(3) As Byte
       FL(39) As Byte
    End Type
    Private UHeader As UGH
随后,转让按如下方式进行:

    With UHeader
    StringToByteArray UHeader.ProgramId(), "ABCDPQRS"

我的问题是,为什么在上面的作业中在ProgramId之后使用括号?对我来说,这似乎是一个函数调用,但显然不是一个函数调用。那么它是什么?

本例中的括号用于指定数组。对于作为字节的Rsp(3),它表示一个由3个字节组成的数组,索引范围为0到2


对于以下行:
StringToByteArray UHeader.ProgramId(),“ABCDPQRS”,StringToByteArray
是一个接受字节数组的方法——当将数组传递给方法时,可以将其作为
array()

传递,实际上并不需要它。调用不带括号的同一行将做完全相同的事情。允许它的原因是因为它是字节数组

也许像这样重写这一行会使它更具可读性:

call StringToByteArray(UHeader.ProgramId(), "ABCDPQRS")
但这也是正确的:

call StringToByteArray(UHeader.ProgramId, "ABCDPQRS")
如果StringToByteArray方法是一个函数而不是一个子例程,则可能对您更有意义:

Private Function StringToByteArray(ByVal strValue As String) As Byte()
    'conversion code left out
End Function
然后你可以这样称呼它:

UHeader.ProgramId() = StringToByteArray("ABCDPQRS")
或者这个:

UHeader.ProgramId = StringToByteArray("ABCDPQRS")

括号也用于数组语法


据说,
StringToByteArray UHeader.ProgramId(),“ABCDPQRS”
严格来说不是赋值,而是方法(子程序或函数)调用
StringToByteArray
将在程序中的某个地方定义,它可能会使用ByRef数组参数、字符串参数,并且可能会将字符串参数复制到字节缓冲区中。

UHeader.ProgramId实际上是指向数组的指针。您只需执行以下操作:
StringToByteArray UHeader.ProgramID,“ABCDPQRS”
。VB6中的规则是函数需要参数列表的括号,子函数需要非括号,除非前面有Call语句,在这种情况下它们需要


由于是通过引用传递数组(默认设置),因此在子例程中执行的操作将在数组本身上执行。基本上,您将传递一个指向数组和文本字符串的指针,子例程将用字符串中的字符填充数组。有点像一个“非正式”函数调用,如果你愿意的话。

Rsp
可能是4个字节——0到3(包括)