问题描述
Vb6.0代码如下:ConstDATASIZE=459DimglngEnrollDataAsVariantDimvniiAsLongDimvByte()AsByteastrBuff=Rs.Fields("TEMP")'2进制字段vByte=astrBuffForvnii=0ToDATASIZE-1glngEnrollData(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)IfvByte(vnii*5)=0ThenglngEnrollData(vnii)=0-glngEnrollData(vnii)EndIfNextvb6.0中运行没有问题但在Vb.net中代码ConstDATASIZE=459DimglngEnrollDataAsobjectDimvniiAsLongDimvByte()AsByte'astrBuff=Rs.Fields("TEMP").value'2进制字段DimastrBuffAsString=Rs.Fields("TEMPLATE").Value.ToStringDimvByte()AsByte=System.Text.Encoding.Default.GetBytes(astrBuff)Forvnii=0ToDATASIZE-1glngEnrollData(vnii)=vByte(vnii*5+1)'执行在这里出现未处理System.NullReferenceExceptionMessage="未设置对象变量或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)IfvByte(vnii*5)=0ThenglngEnrollData(vnii)=0-glngEnrollData(vnii)EndIfNext请教,在vb.net中,我该怎么修改,不胜感激!!!!!!
解决方案
解决方案二:
DimglngEnrollDataAsobject改成:DimglngEnrollData(DATASIZE-1)AsLong
解决方案三:
谢谢你的回答但我将DimglngEnrollDataAsobject改成:DimglngEnrollData(DATASIZE-1)AsLong或者DimglngEnrollData(DATASIZE-1)Asbyte都不行执行到glngEnrollData(vnii)=vByte(vnii*5+1)这里就直接死掉了
解决方案四:
引用2楼hgl99的回复:
谢谢你的回答但我将DimglngEnrollDataAsobject改成:DimglngEnrollData(DATASIZE-1)AsLong或者DimglngEnrollData(DATASIZE-1)Asbyte都不行执行到glngEnrollData(vnii)=vByte(vnii*5+1)这里就直接死掉了
DimglngEnrollData(DATASIZE-1)AsLong还出错,估计是vByte数组上限溢出了吧。你跟踪下或在循环前加入以下的判断就知道了:IfvByte.Length<(DATASIZE-1)*5+4ThenMsgBox("vByte中数据太少,无法进行计算。")EndIf