代码之家  ›  专栏  ›  技术社区  ›  Stefan van de Laarschot

VB6代码到VB。净额

  •  0
  • Stefan van de Laarschot  · 技术社区  · 6 年前

    我在将VB6转换为VB时遇到问题。NET我需要将其翻译为新功能。

    我尝试将VB6代码翻译成VB。但是失败了也许有人可以帮我

    我不知道是什么 ReDim intKeyChars(1 To intKeyLen) 剩下的应该像我想的那样可以复制粘贴到VB上。净额。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 回复  |  直到 6 年前
        1
  •  3
  •   David    6 年前

    让我们逐步了解代码的实际功能:

    ReDim intKeyChars(1 To intKeyLen)
    

    ReDim关键字字面上重新声明 intKeyChars 变量,其中作为1到 intKeyLen公司 指定希望数组的底部从索引1开始(这在旧式VB代码中很常见),而数组的顶部以索引intKeyLen的值结束。

    有些事情你需要调整。首先,在Visual Basic中,数组的索引不能为1。NET中,它们的索引必须为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
    
        2
  •  0
  •   R.J. Dunnill    6 年前

    ReDim语句可以如下所示: ReDim intKeyChars(intKeyLen)

    VB。NET数组总是以零为下界,因此ReDim只接受一个参数,即上界。请注意,与C#不同,上界索引将是UBound(intKeyChars),而不是UBound(intKeyChars)-1,因此其余代码应该可以工作。(intKeyChars元素零将不使用。)