您好我有这个结构
[StructLayout (LayoutKind.Sequential)]
public struct Transfer_packet
{
public int _packet_type; // 0 is action 1 is data
public int _packet_len; // length of data
public byte[] _data;//;= new byte[DataLenght];
public void fill()
{
}
public byte[] deserialize()
{
int size = System.Runtime.InteropServices.Marshal.SizeOf(this);
byte[] arr = new byte[size];
IntPtr ptr = System.Runtime.InteropServices.Marshal.AllocHGlobal(size);
System.Runtime.InteropServices.Marshal.StructureToPtr(this, ptr, true); // error raised
System.Runtime.InteropServices.Marshal.Copy(ptr,arr,0,size);
System.Runtime.InteropServices.Marshal.FreeHGlobal(ptr);
return arr;
}
}
我正在尝试将struct的内容转换为字节数组,以便通过网络发送并在其他计算机中恢复它,但在我上面提到的代码中,我收到错误尝试读取或写入受保护的内存。这通常表明其他内存已损坏。我不知道为什么每件事对我来说都很好,但是元帅正在尝试访问受保护的内存,我怎样才能将结构数据转换为其内部的字节数组块我用C ++完美地用简单的memcpy完成它但在c#中导致错误!!!
谢谢
答案 0 :(得分:1)
true
参数要求框架删除源内存。当然,这个记忆并没有被编组者分配,所以它失败了。请尝试以下方法:
System.Runtime.InteropServices.Marshal.StructureToPtr(this, ptr, false);