VB6 代码 VB.NET
VB6 Code to VB.NET
我在将 VB6 翻译成 VB.NET 时遇到问题,我需要将其翻译为新功能。
我尝试将 VB6 代码翻译成 VB.net 但失败了也许有人可以帮我解决这个问题
我不知道 ReDim intKeyChars(1 To intKeyLen)
应该是什么样子,其余的我认为可以复制粘贴到 VB.NET。在某些情况下,VB6 的行为不同于 VB.NET。
Public Function EnDecrypt( _
ByVal strInputText As String, _
ByRef strOutputText As String _
) As Boolean
On Error Resume Next
On Error GoTo ErrorHandler
' Private vars
Dim intKeyChars() As Long
Dim intKeyChr As Long
Dim intKeyIndex As Long
Dim intKeyLen As Long
Dim intTextLen As Long
Dim intCounter As Long
Dim strInputKey As String
' Set input key
strInputKey = "TEST1290"
' Move key chars into an array of long to speed up code
intTextLen = Len(strInputText)
intKeyLen = Len(strInputKey)
intKeyIndex = intKeyLen
If (intKeyLen = 0) Or (intTextLen = 0) Then
GoTo ErrorHandler
End If
ReDim intKeyChars(1 To intKeyLen)
For intCounter = 1 To intKeyLen
intKeyChars(intCounter) = Asc(Mid(strInputKey, intCounter, 1))
Next intCounter
For intCounter = 1 To intTextLen
' Get the next char in the password
intKeyChr = intKeyChars(intKeyIndex)
' EnDecrypt one character in the string
Mid(strInputText, intCounter, 1) = Chr(Asc(Mid(strInputText, intCounter, 1)) Xor intKeyChr)
' Modify the character in the password (avoid overflow)
intKeyChars(intKeyIndex) = (intKeyChr + 32) Mod 126
' Prepare to use next char in the password
intKeyIndex = (intKeyIndex Mod intKeyLen) + 1
Next intCounter
' Return values
strOutputText = strInputText
EnDecrypt = True
Exit Function
ErrorHandler:
' Return values
strOutputText = vbNullString
EnDecrypt = False
End Function
让我们逐步了解代码的实际作用:
ReDim intKeyChars(1 To intKeyLen)
ReDim 关键字从字面上重新声明 intKeyChars 变量,其中 1 到 intKeyLen 指定您想要数组的底部从 1 的索引开始(这在遗留 VB 代码中很常见)和数组的顶部以 intKeyLen 的任何值的索引结束。
您需要进行一些调整。首先,在 Visual Basic .NET 中,数组的索引不能为 1,它们的索引必须为 0。
其次,遗留 VB 代码使用 ReDim 语句向数组添加项的原因是因为没有简单的方法向集合添加或删除项,您实际上必须重新分配内存并在那时添加或删除任何值。幸运的是,在 Visual Basic .NET 中,我们有 List(Of T) collection,它为我们提供了内置方法,例如 Add、AddRange、Insert、Remove、RemoveAt 和 RemoveRange。但是在进一步查看代码之后,原始遗留代码应该首先声明指定上限等于字符串长度的数组(不需要每次都重新调整数组)。
因此,在您的情况下,更新后的代码可能如下所示:
Dim intKeyChars(strInputKey.Length - 1) As Integer
For intCounter As Integer = 0 To intKeyChars.Length - 1
intKeyChars(intCounter) = Asc(strInputKey(intCounter))
Next
ReDim 语句可以如下所示:
ReDim intKeyChars(intKeyLen)
VB.NET 数组总是下界为零,因此 ReDim 只接受一个参数,即上界。请注意,与 C# 不同,上限索引将是 UBound(intKeyChars),而不是 UBound(intKeyChars)-1,因此其余代码应该可以工作。 (intKeyChars 元素零将不被使用。)
我在将 VB6 翻译成 VB.NET 时遇到问题,我需要将其翻译为新功能。
我尝试将 VB6 代码翻译成 VB.net 但失败了也许有人可以帮我解决这个问题
我不知道 ReDim intKeyChars(1 To intKeyLen)
应该是什么样子,其余的我认为可以复制粘贴到 VB.NET。在某些情况下,VB6 的行为不同于 VB.NET。
Public Function EnDecrypt( _
ByVal strInputText As String, _
ByRef strOutputText As String _
) As Boolean
On Error Resume Next
On Error GoTo ErrorHandler
' Private vars
Dim intKeyChars() As Long
Dim intKeyChr As Long
Dim intKeyIndex As Long
Dim intKeyLen As Long
Dim intTextLen As Long
Dim intCounter As Long
Dim strInputKey As String
' Set input key
strInputKey = "TEST1290"
' Move key chars into an array of long to speed up code
intTextLen = Len(strInputText)
intKeyLen = Len(strInputKey)
intKeyIndex = intKeyLen
If (intKeyLen = 0) Or (intTextLen = 0) Then
GoTo ErrorHandler
End If
ReDim intKeyChars(1 To intKeyLen)
For intCounter = 1 To intKeyLen
intKeyChars(intCounter) = Asc(Mid(strInputKey, intCounter, 1))
Next intCounter
For intCounter = 1 To intTextLen
' Get the next char in the password
intKeyChr = intKeyChars(intKeyIndex)
' EnDecrypt one character in the string
Mid(strInputText, intCounter, 1) = Chr(Asc(Mid(strInputText, intCounter, 1)) Xor intKeyChr)
' Modify the character in the password (avoid overflow)
intKeyChars(intKeyIndex) = (intKeyChr + 32) Mod 126
' Prepare to use next char in the password
intKeyIndex = (intKeyIndex Mod intKeyLen) + 1
Next intCounter
' Return values
strOutputText = strInputText
EnDecrypt = True
Exit Function
ErrorHandler:
' Return values
strOutputText = vbNullString
EnDecrypt = False
End Function
让我们逐步了解代码的实际作用:
ReDim intKeyChars(1 To intKeyLen)
ReDim 关键字从字面上重新声明 intKeyChars 变量,其中 1 到 intKeyLen 指定您想要数组的底部从 1 的索引开始(这在遗留 VB 代码中很常见)和数组的顶部以 intKeyLen 的任何值的索引结束。
您需要进行一些调整。首先,在 Visual Basic .NET 中,数组的索引不能为 1,它们的索引必须为 0。
其次,遗留 VB 代码使用 ReDim 语句向数组添加项的原因是因为没有简单的方法向集合添加或删除项,您实际上必须重新分配内存并在那时添加或删除任何值。幸运的是,在 Visual Basic .NET 中,我们有 List(Of T) collection,它为我们提供了内置方法,例如 Add、AddRange、Insert、Remove、RemoveAt 和 RemoveRange。但是在进一步查看代码之后,原始遗留代码应该首先声明指定上限等于字符串长度的数组(不需要每次都重新调整数组)。
因此,在您的情况下,更新后的代码可能如下所示:
Dim intKeyChars(strInputKey.Length - 1) As Integer
For intCounter As Integer = 0 To intKeyChars.Length - 1
intKeyChars(intCounter) = Asc(strInputKey(intCounter))
Next
ReDim 语句可以如下所示:
ReDim intKeyChars(intKeyLen)
VB.NET 数组总是下界为零,因此 ReDim 只接受一个参数,即上界。请注意,与 C# 不同,上限索引将是 UBound(intKeyChars),而不是 UBound(intKeyChars)-1,因此其余代码应该可以工作。 (intKeyChars 元素零将不被使用。)