我试图发送这个结构:
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());
我有这个例外:
运行时遇到了致命错误。错误的地址是0x792a02fe,在线程0x1860上。错误代码是0xc0000005。此错误可能是CLR中的错误,也可能是用户代码的不安全或不可验证部分中的错误。此错误的常见来源包括COM-interop或PInvoke的用户封送错误,这可能会破坏堆栈。
感谢您的帮助;