在VB6中指定变量时,何时使用括号,何时不使用括号?
我正在看一些旧的VB6代码。我是VB新手,有C/Java背景,所以我不理解一些赋值语句。这里有一个例子-在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 随后,转让按如下方式进行:
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(包括)