当前位置:编程学习 > C#/ASP.NET >>

Vb6.0 Variant 在 Vb.net 中 Object 的问题

Vb6.0代码如下: 
Const DATASIZE = 459 
Dim glngEnrollData As Variant 
Dim vnii As Long 
Dim vByte() As Byte 
    astrBuff= Rs.Fields("TEMP")  '2进制字段 
    vByte = astrBuff 
    For vnii = 0 To DATASIZE - 1 
        glngEnrollData(vnii) = vByte(vnii * 5 + 1) 
        glngEnrollData(vnii) = glngEnrollData(vnii) * 256 + vByte(vnii * 5 + 2) 
        glngEnrollData(vnii) = glngEnrollData(vnii) * 256 + vByte(vnii * 5 + 3) 
        glngEnrollData(vnii) = glngEnrollData(vnii) * 256 + vByte(vnii * 5 + 4) 
        If vByte(vnii * 5) = 0 Then 
            glngEnrollData(vnii) = 0 - glngEnrollData(vnii) 
        End If 
    Next 

vb6.0中运行没有问题 
但在Vb.net中代码 

Const DATASIZE = 459 
Dim glngEnrollData As object 
Dim vnii As Long 
Dim vByte() As Byte 
    'astrBuff= Rs.Fields("TEMP").value  '2进制字段 

  Dim astrBuff As String = Rs.Fields("TEMPLATE").Value.ToString 
  Dim vByte() As Byte = System.Text.Encoding.Default.GetBytes(astrBuff) 

    For vnii = 0 To DATASIZE - 1 
        glngEnrollData(vnii) = vByte(vnii * 5 + 1)  '执行在这里出现 未处理 System.NullReferenceException  Message="未设置对象变量或 With 块变量。"错误 
        glngEnrollData(vnii) = glngEnrollData(vnii) * 256 + vByte(vnii * 5 + 2) 
        glngEnrollData(vnii) = glngEnrollData(vnii) * 256 + vByte(vnii * 5 + 3) 
        glngEnrollData(vnii) = glngEnrollData(vnii) * 256 + vByte(vnii * 5 + 4) 
        If vByte(vnii * 5) = 0 Then 
            glngEnrollData(vnii) = 0 - glngEnrollData(vnii) 
        End If 
    Next 


请教,在vb.net中,我该怎么修改,不胜感激!!!!!! 
--------------------编程问答-------------------- Dim glngEnrollData As object 改成:
Dim glngEnrollData(DATASIZE - 1) As Long --------------------编程问答-------------------- 谢谢你的回答
但我将Dim glngEnrollData As object 改成: 
Dim glngEnrollData(DATASIZE - 1) As Long 或者 Dim glngEnrollData(DATASIZE - 1) As byte 都不行
执行到 glngEnrollData(vnii) = vByte(vnii * 5 + 1) 这里就直接死掉了
--------------------编程问答--------------------
引用 2 楼 hgl99 的回复:
谢谢你的回答 
但我将Dim glngEnrollData As object 改成: 
Dim glngEnrollData(DATASIZE - 1) As Long 或者 Dim glngEnrollData(DATASIZE - 1) As byte 都不行 
执行到 glngEnrollData(vnii) = vByte(vnii * 5 + 1) 这里就直接死掉了 

Dim glngEnrollData(DATASIZE - 1) As Long 还出错,估计是vByte数组上限溢出了吧。你跟踪下或在循环前加入以下的判断就知道了:
If vByte.Length < (DATASIZE - 1) * 5 + 4 Then
            MsgBox("vByte中数据太少,无法进行计算。")
End If
补充:.NET技术 ,  VB.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,