dai*_*ign 2 vb6 basic reverse-engineering pass-by-reference byref
我必须从旧版的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
Run Code Online (Sandbox Code Playgroud)
该代码取决于Sub value
更改Calculate
以达到“成功”。在原始项目中,如果不起作用,则有数百行代码将无法访问。
所以问题是,有没有办法value
在仍然使用整数类型的情况下通过引用传递而不使用ByRef?还是我要完全理解的错误代码?
作者在代码库中的任何地方都没有使用显式的ByRef或ByVal语句。变量使用类型字符声明,但是子例程参数缺少类型声明。我不确定所使用的Visual Basic版本。在主文件中,第一个语句为VERSION 5.00
。
当我在Visual Studio中打开代码时,参数的类型显示为Object
。因此,Visual Studio知道我不知道的东西,或者仅仅是因为参数缺少类型声明。
我还拥有该软件的编译版本,其产生的结果看起来不错。因此,当我完成代码转录后,我至少可以对照原始结果进行检查。
默认的参数传递是ByRef。您只需要指定ByVal参数。
至于在Visual Studio中转换为Object的参数的类型,这是因为Visual Basic中的默认类型是“ Variant”,对于所有意图和目的,该类型都映射到System.Object类型。
归档时间: |
|
查看次数: |
88 次 |
最近记录: |