我正在尝试发送此结构:
public struct imageBlock
{
public uint blockId;
public Bitmap block;
}
首先使用 udp 套接字我使用此函数将结构转换为字节数组:
public byte[] getBytes(MyStructure str)
{
int size = Marshal.SizeOf(str);
byte[] arr = new byte[size];
IntPtr ptr = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(str, ptr, true);
Marshal.Copy(ptr, arr, 0, size);
Marshal.FreeHGlobal(ptr);
return arr;
}
我发送它:
buffer = crop.getBytes((imageBlock)ImageToBeSent[i]);
crop.sender(buffer);
当我尝试接收结构时出现问题,我有一个例外:
data = client.Receive(ref localEp);
int size = Marshal.SizeOf(myStructure);
IntPtr ptr = Marshal.AllocHGlobal(size);
Marshal.Copy(data, 0, ptr, size);
myStructure= (MyStructure)Marshal.PtrToStructure(ptr, myStructure.GetType());
Marshal.FreeHGlobal(ptr);
在线上 :
myStructure= (MyStructure)Marshal.PtrToStructure(ptr, myStructure.GetType());
我得到了这个例外:
运行时遇到致命错误。错误地址位于线程 0x1860 上的 0x792a02fe。错误代码为 0xc0000005。此错误可能是 CLR 中的错误或用户代码的不安全或不可验证部分中的错误。此错误的常见来源包括 COM 互操作或 PInvoke 的用户封送错误,这可能会损坏堆栈。
感谢您的帮助;