こんにちは、私はこの構造体を持っています
[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;
}
}
これをネットワーク経由で送信し、別のコンピューターで取得するために、構造体のコンテンツをバイト配列に変換しようとしていますが、コード (上記) でエラーが発生しました:
保護されたメモリを読み書きしようとしました。
これは多くの場合、一部のメモリが破損していることを示しています。理由はわかりません。私にはすべて問題ないように見えますが、マーシャルは保護されたメモリにアクセスしようとしています...
構造体インスタンスをバイト配列に変換するにはどうすればよいですか? 私はC ++で簡単に完全にそれを行いましたmemcpy
が、C#ではできません。