我在将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
答案 0 :(得分:3)
让我们逐步完成代码的实际操作:
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
答案 1 :(得分:0)
ReDim语句如下所示:
ReDim intKeyChars(intKeyLen)
VB.NET数组总是低于零,因此ReDim只接受一个参数,即上限。请注意,与C#不同,上限索引将是UBound(intKeyChars),而不是UBound(intKeyChars)-1,因此其余代码应该可以工作。 (intKeyChars元素零将被使用。)