首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用ByRef + VB6 7传递参数

用ByRef + VB6 7传递参数
EN

Stack Overflow用户
提问于 2013-07-03 16:56:35
回答 1查看 1.4K关注 0票数 1

我已经在VB6工作了很多年了,但我遇到了一些很奇怪的事情,我自己也无法证实这一结果。因此,我想知道以下代码的输出是否是

7 7

7 6

下面是代码:

代码语言:javascript
运行
复制
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是一个命令按钮。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-03 18:20:16

代码语言:javascript
运行
复制
V = 6
Call AddV(V)

您将不会使用此代码来观察此行为。这与Windows也没有任何关系,它与VB6代码执行无关。然而,对于你的观察,有一个简单的解释。您的代码可能如下所示:

代码语言:javascript
运行
复制
V = 6
AddV (V)

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

虽然这是有意的,但这个特性是一个主要的错误工厂,并没有被转移到VB.NET中。括号现在总是在过程调用中表示相同的意思,不管被调用的过程是Sub还是函数,您都可以使用它们。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17453910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档