VB6代码到VB.NET

时间:2018-01-04 12:38:51

标签: vb.net vb6 vb6-migration

我在将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

2 个答案:

答案 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元素零将被使用。)