gpt4 book ai didi

windows - 使用 VB6 + Windows 7 传递 ByRef 的参数

转载 作者:可可西里 更新时间:2023-11-01 11:19:49 26 4
gpt4 key购买 nike

我已经使用 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 XP + VB6) 上,这按预期工作。所以我得到了第一个输出。但是,我在 Windows 7 + VB6 上看到了相同的程序,但输出不一样。

谁能解释一下为什么会这样?然而,同样的事情在 VB 2008 + Windows 7 上工作得很好。我认为按值调用和按引用调用是任何语言/操作系统中的标准参数传递技术。

谢谢!

编辑:cmdOK 是一个命令按钮。

最佳答案

V = 6
Call AddV(V)

您不会用这段代码观察到这种行为。这也与 Windows 版本无关,它不涉及 VB6 代码执行。然而,您的观察有一个简单的解释。您的代码可能如下所示:

V = 6
AddV (V)

换句话说,没有 Call 关键字。现在 VB6 中发生了一些非常可怕的事情。括号不再意味着相同的东西了。调用 Sub 时不使用括号,仅在调用函数时使用。相反,它们成为 表达式 的一部分,与您在编写 Print 4 * (5 + 6) 时使用的括号类型相同。它生成 V 值的副本。被调用过程更新该副本,它不再影响 V 变量的值。

虽然这是有意为之,但该功能是一个主要的错误工厂,并没有转移到 VB.NET 中。现在,括号在过程调用中的含义始终相同,无论被调用的过程是 Sub 还是 Function,您都可以使用它们。

关于windows - 使用 VB6 + Windows 7 传递 ByRef 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17453910/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com