C#语言 byte数组反序列化为结构体时出错,请C#大神帮忙看下 20
百度知道的排版实在很让人崩溃,如果下边的代码已经变成了一行,就请看附带的图片吧!结构体定义:[StructLayout(LayoutKind.Sequential)]pu...
百度知道的排版实在很让人崩溃,如果下边的代码已经变成了一行,就请看附带的图片吧!
结构体定义:
[StructLayout(LayoutKind.Sequential)]
public struct Space_DATA{
public byte uST;
public byte uSM;
public byte uET;
public byte uEM;
};
public struct A_SPACE_DATA{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 7)]
public Space_DATA[] sData;
};
反序列化代码:
A_SPACE_DATA timeSpace=new A_SPACE_DATA();
int size = Marshal.SizeOf(timeSpace.GetType()); //程序运行到这里后闪退,无报错
uint nLen = (uint)size;
IntPtr structPtr = Marshal.AllocHGlobal(size);
try{
Marshal.Copy(szBuf, 2 + 8 - 1, structPtr, size);
timeSpace = (A_SPACE_DATA)Marshal.PtrToStructure(structPtr, timeSpace.GetType());
}
catch(ArgumentException)
{
throw;
}
finally
{
Marshal.FreeHGlobal(structPtr);
}
上边的代码有闪退现象,无奈改成了这样:
A_SPACE_DATA timeSpace=new A_SPACE_DATA();
int size = 7*Marshal.SizeOf(typeof(Space_DATA)); //程序运行到这里顺利通过
uint nLen = (uint)size;
IntPtr structPtr = Marshal.AllocHGlobal(size);
try{
Marshal.Copy(szBuf, 2 + 8 - 1, structPtr, size);
timeSpace = (A_SPACE_DATA)Marshal.PtrToStructure(structPtr, timeSpace.GetType());//此句执行完timeSpace.sData=null,相当于没执行
}
catch (ArgumentException)
{
throw;
}
finally{
Marshal.FreeHGlobal(structPtr); //执行到这里后再次闪退
}
请C#大神帮忙看下这两次闪退各是什么原因,有什么解决办法? 展开
结构体定义:
[StructLayout(LayoutKind.Sequential)]
public struct Space_DATA{
public byte uST;
public byte uSM;
public byte uET;
public byte uEM;
};
public struct A_SPACE_DATA{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 7)]
public Space_DATA[] sData;
};
反序列化代码:
A_SPACE_DATA timeSpace=new A_SPACE_DATA();
int size = Marshal.SizeOf(timeSpace.GetType()); //程序运行到这里后闪退,无报错
uint nLen = (uint)size;
IntPtr structPtr = Marshal.AllocHGlobal(size);
try{
Marshal.Copy(szBuf, 2 + 8 - 1, structPtr, size);
timeSpace = (A_SPACE_DATA)Marshal.PtrToStructure(structPtr, timeSpace.GetType());
}
catch(ArgumentException)
{
throw;
}
finally
{
Marshal.FreeHGlobal(structPtr);
}
上边的代码有闪退现象,无奈改成了这样:
A_SPACE_DATA timeSpace=new A_SPACE_DATA();
int size = 7*Marshal.SizeOf(typeof(Space_DATA)); //程序运行到这里顺利通过
uint nLen = (uint)size;
IntPtr structPtr = Marshal.AllocHGlobal(size);
try{
Marshal.Copy(szBuf, 2 + 8 - 1, structPtr, size);
timeSpace = (A_SPACE_DATA)Marshal.PtrToStructure(structPtr, timeSpace.GetType());//此句执行完timeSpace.sData=null,相当于没执行
}
catch (ArgumentException)
{
throw;
}
finally{
Marshal.FreeHGlobal(structPtr); //执行到这里后再次闪退
}
请C#大神帮忙看下这两次闪退各是什么原因,有什么解决办法? 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询