我已经在VB6工作了很多年了,但我遇到了一些很奇怪的事情,我自己也无法证实这一结果。因此,我想知道以下代码的输出是否是
7 7
或
7 6
下面是代码:
Option Explicit
Private Sub cmdOk_Click()
Dim V As Integer
V = 6
Call AddV(V)
Print V
End Sub
Sub AddV(ByRef P As Integer)
P = P + 1
Print P
End Sub在我的系统(Windows + VB6)上,这是按预期工作的。所以我得到了第一个输出。但是,我在Windows7+ VB6上看到了相同的程序,输出也不一样。
有人能解释一下为什么会这样吗?然而,同样的事情在VB 2008 + Windows 7上运行得很好,我认为逐值调用和按引用调用是任何语言/操作系统中的标准参数传递技术。
谢谢!
编辑: cmdOK是一个命令按钮。
发布于 2013-07-03 18:20:16
V = 6
Call AddV(V)您将不会使用此代码来观察此行为。这与Windows也没有任何关系,它与VB6代码执行无关。然而,对于你的观察,有一个简单的解释。您的代码可能如下所示:
V = 6
AddV (V)换句话说,没有调用关键字。现在,在VB6中发生了一些非常可怕的事情。括号不再意味着同样的事情了。只有在调用函数时,才不会使用括号来调用Sub。相反,它们成为表达式的一部分,例如,编写Print 4 * (5 + 6)时使用的相同类型的括号。它生成V值的,被调用的过程更新该副本,不再影响V变量的值。
虽然这是有意的,但这个特性是一个主要的错误工厂,并没有被转移到VB.NET中。括号现在总是在过程调用中表示相同的意思,不管被调用的过程是Sub还是函数,您都可以使用它们。
https://stackoverflow.com/questions/17453910
复制相似问题