遗留 Visual Basic 代码中的隐式 ByRef
Implicit ByRef in legacy Visual Basic code
我必须从遗留的 Visual Basic 软件中复制一个算法,但我不理解代码中的一件事。
作者似乎使用了某种方式通过引用隐式传递整数等简单数据类型。第一次以为是原软件的bug,第三次看起来是故意的
我无法 运行 和调试原始(VB6 或更早版本)代码。在我尝试重现行为的每个简单代码示例中(使用 VB.NET),它总是按值传递,除非明确使用 ByRef。
我举了个例子:
Option Explicit
Module VBModule
Public Sub Calculate(value)
value = value + 1
End Sub
Function Starter()
Dim value%
Call Calculate(value)
If value > 0 Then
Console.WriteLine("Success")
End If
Console.WriteLine(value)
End Function
Sub Main()
Call Starter()
End Sub
End Module
代码取决于 value
被 Calculate
Sub 更改以达到 "Success"。原项目中有数百行代码,如果这不起作用,将无法访问
那么问题来了,有没有办法在不使用 ByRef 的情况下通过引用传递 value
而仍然使用整数类型?还是我试图理解的代码完全有问题?
作者在代码库中没有任何地方使用显式 ByRef 或 ByVal 语句。变量用类型字符声明,但子例程参数缺少类型声明。我不确定使用的 Visual Basic 版本。在主文件中,第一条语句是 VERSION 5.00
.
当我打开Visual Studio中的代码时,参数的类型显示为Object
。所以要么 Visual Studio 知道一些我不知道的东西,要么这只是因为参数缺少类型声明。
我还拥有该软件的编译版本,它生成的结果看起来不错。因此,当我完成转录代码时,我至少可以将结果与原始结果进行核对。
默认传参是ByRef。您只需指定 ByVal 参数。
至于在 Visual Studio 中转换为 Object 的参数类型,这是因为 Visual Basic 中的默认类型是 "Variant",就所有意图和目的而言,它映射到 System.Object类型。
我必须从遗留的 Visual Basic 软件中复制一个算法,但我不理解代码中的一件事。
作者似乎使用了某种方式通过引用隐式传递整数等简单数据类型。第一次以为是原软件的bug,第三次看起来是故意的
我无法 运行 和调试原始(VB6 或更早版本)代码。在我尝试重现行为的每个简单代码示例中(使用 VB.NET),它总是按值传递,除非明确使用 ByRef。
我举了个例子:
Option Explicit
Module VBModule
Public Sub Calculate(value)
value = value + 1
End Sub
Function Starter()
Dim value%
Call Calculate(value)
If value > 0 Then
Console.WriteLine("Success")
End If
Console.WriteLine(value)
End Function
Sub Main()
Call Starter()
End Sub
End Module
代码取决于 value
被 Calculate
Sub 更改以达到 "Success"。原项目中有数百行代码,如果这不起作用,将无法访问
那么问题来了,有没有办法在不使用 ByRef 的情况下通过引用传递 value
而仍然使用整数类型?还是我试图理解的代码完全有问题?
作者在代码库中没有任何地方使用显式 ByRef 或 ByVal 语句。变量用类型字符声明,但子例程参数缺少类型声明。我不确定使用的 Visual Basic 版本。在主文件中,第一条语句是 VERSION 5.00
.
当我打开Visual Studio中的代码时,参数的类型显示为Object
。所以要么 Visual Studio 知道一些我不知道的东西,要么这只是因为参数缺少类型声明。
我还拥有该软件的编译版本,它生成的结果看起来不错。因此,当我完成转录代码时,我至少可以将结果与原始结果进行核对。
默认传参是ByRef。您只需指定 ByVal 参数。
至于在 Visual Studio 中转换为 Object 的参数类型,这是因为 Visual Basic 中的默认类型是 "Variant",就所有意图和目的而言,它映射到 System.Object类型。