将 vb.net 转换为旧的 Visual Basic 6.0 代码
Converting vb.net to old visual basic 6.0 code
我将代码从 c# 转换为 vb.net。现在我需要将代码转换为 Visual Basic 6.0
任何人都可以帮助解决这个转换问题吗?
Private Shared Function DigitoM10(ByVal pIntNumero As Long, ByVal pIntPersonaliza As Integer) As Integer
Dim intPesos = {2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1}
Dim strText = pIntNumero.ToString
If strText.Length > 16 Then Throw New Exception("Número no soportado para cálculo del dígito verificador")
Dim intSuma = 0
Dim intIdx = 0
For intPos = strText.Length - 1 To 0
intSuma += Convert.ToInt32(strText(intPos).ToString) * intPesos(intIdx)
intIdx += 1
Next
intSuma = intSuma Mod 10
intSuma = 10 - intSuma
If intSuma = 10 Then
intSuma = 3
End If
Return intSuma + pIntPersonaliza
End Function
假设它将在一个模块中,您可以删除 Shared
关键字。
Public Function DigitoM10(ByVal pIntNumero As Double, ByVal pIntPersonaliza As Long) As Long
Dim intPesos As Variant
Dim strText As String
Dim intSuma As Long, intIdx As Long, intPos As Long
intPesos = Array(2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1)
strText = Format$(pIntNumero, "0")
If Len(strText) > 16 Then
Err.Raise ErrorValueEnum.adErrInvalidArgument, "DigitoM10", "Número no soportado para cálculo del dígito verificador"
End If
intSuma = 0
intIdx = LBound(intPesos)
For intPos = Len(strText) To 1 Step -1
intSuma = intSuma + CLng(Mid$(strText, intPos, 1)) * intPesos(intIdx)
intIdx = intIdx + 1
Next
intSuma = intSuma Mod 10
intSuma = 10 - intSuma
If intSuma = 10 Then
intSuma = 3
End If
DigitoM10 = intSuma + pIntPersonaliza
End Function
我不得不改变很多东西。 VB6 通常不支持 strText.Length
中的点符号。请改用 Len(strText)
。 Err.Raise
.
抛出异常
请注意,.NET 中的 Long
是一个 64 位整数,在 VB6 中不可用。 .NET Integer
是 VB6 Long
。所以我声明了 pIntNumero As Double
并用 Format$(pIntNumero, "0")
格式化它以将其转换为字符串,否则,用 CStr()
可能会切换为指数格式。这一直有效到 15 位数字。如果您需要 16 位数字,请直接将数字作为字符串提供
Public Function DigitoM10(ByVal strText As String, ByVal pIntPersonaliza As Long) As Long
那你就可以掉线了
strText = Format$(pIntNumero, "0")
在 .NET 中,可以对字符串进行索引以检索单个字符,如 strText(intPos)
中那样。这是通过 VB6 中的 Mid$
函数完成的。
另请注意,在 .NET 中,数组始终从零开始。即,第一个索引是 0
。在 VB6/VBA 中,它们通常从 1 开始,但这可以更改。参见:Option Base statement and Declaring arrays (VBA)。请注意,VB6 和 VBA 是在不同环境中运行的相同语言。
使用已知示例测试此方法!
我将代码从 c# 转换为 vb.net。现在我需要将代码转换为 Visual Basic 6.0
任何人都可以帮助解决这个转换问题吗?
Private Shared Function DigitoM10(ByVal pIntNumero As Long, ByVal pIntPersonaliza As Integer) As Integer
Dim intPesos = {2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1}
Dim strText = pIntNumero.ToString
If strText.Length > 16 Then Throw New Exception("Número no soportado para cálculo del dígito verificador")
Dim intSuma = 0
Dim intIdx = 0
For intPos = strText.Length - 1 To 0
intSuma += Convert.ToInt32(strText(intPos).ToString) * intPesos(intIdx)
intIdx += 1
Next
intSuma = intSuma Mod 10
intSuma = 10 - intSuma
If intSuma = 10 Then
intSuma = 3
End If
Return intSuma + pIntPersonaliza
End Function
假设它将在一个模块中,您可以删除 Shared
关键字。
Public Function DigitoM10(ByVal pIntNumero As Double, ByVal pIntPersonaliza As Long) As Long
Dim intPesos As Variant
Dim strText As String
Dim intSuma As Long, intIdx As Long, intPos As Long
intPesos = Array(2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1)
strText = Format$(pIntNumero, "0")
If Len(strText) > 16 Then
Err.Raise ErrorValueEnum.adErrInvalidArgument, "DigitoM10", "Número no soportado para cálculo del dígito verificador"
End If
intSuma = 0
intIdx = LBound(intPesos)
For intPos = Len(strText) To 1 Step -1
intSuma = intSuma + CLng(Mid$(strText, intPos, 1)) * intPesos(intIdx)
intIdx = intIdx + 1
Next
intSuma = intSuma Mod 10
intSuma = 10 - intSuma
If intSuma = 10 Then
intSuma = 3
End If
DigitoM10 = intSuma + pIntPersonaliza
End Function
我不得不改变很多东西。 VB6 通常不支持 strText.Length
中的点符号。请改用 Len(strText)
。 Err.Raise
.
请注意,.NET 中的 Long
是一个 64 位整数,在 VB6 中不可用。 .NET Integer
是 VB6 Long
。所以我声明了 pIntNumero As Double
并用 Format$(pIntNumero, "0")
格式化它以将其转换为字符串,否则,用 CStr()
可能会切换为指数格式。这一直有效到 15 位数字。如果您需要 16 位数字,请直接将数字作为字符串提供
Public Function DigitoM10(ByVal strText As String, ByVal pIntPersonaliza As Long) As Long
那你就可以掉线了
strText = Format$(pIntNumero, "0")
在 .NET 中,可以对字符串进行索引以检索单个字符,如 strText(intPos)
中那样。这是通过 VB6 中的 Mid$
函数完成的。
另请注意,在 .NET 中,数组始终从零开始。即,第一个索引是 0
。在 VB6/VBA 中,它们通常从 1 开始,但这可以更改。参见:Option Base statement and Declaring arrays (VBA)。请注意,VB6 和 VBA 是在不同环境中运行的相同语言。
使用已知示例测试此方法!