gpt4 book ai didi

vb6 - 遗留 Visual Basic 代码中的隐式 ByRef

转载 作者:行者123 更新时间:2023-12-02 08:01:01 37 4
gpt4 key购买 nike

我必须从遗留的 Visual Basic 软件中复制一个算法,但有一点我不理解代码。

作者似乎使用了某种方式通过引用隐式传递整数等简单数据类型。第一次我认为它可能是原始软件中的错误,但第三次出现后它看起来是故意的。

我无法运行和调试原始(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

代码取决于 valueCalculate Sub 更改以达到“成功”。在原来的项目中有数百行代码,如果这不起作用,将无法访问。

所以问题是,有没有一种方法可以在不使用 ByRef 的情况下通过引用传递 value,同时仍然使用整数类型?还是我试图理解的代码完全有问题?

作者在代码库中没有任何地方使用显式的 ByRef 或 ByVal 语句。变量用类型字符声明,但子例程参数缺少类型声明。我不确定使用的 Visual Basic 版本。在主文件中,第一条语句是 VERSION 5.00

当我在 Visual Studio 中打开代码时,参数的类型显示为 Object。因此,要么 Visual Studio 知道一些我不知道的事情,要么这只是因为参数缺少类型声明。

我还拥有该软件的编译版本,它生成的结果看起来不错。因此,当我完成转录代码时,我至少可以对照原始结果检查结果。

最佳答案

默认传参是ByRef。您只需指定 ByVal 参数。

至于在 Visual Studio 中被转换为 Object 的参数类型,这是因为 Visual Basic 中的默认类型是“Variant”,它在所有意图和目的上都映射到 System.Object 类型。

关于vb6 - 遗留 Visual Basic 代码中的隐式 ByRef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57289522/

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