0

我正在尝试发送此结构:

 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 的用户封送错误,这可能会损坏堆栈。

感谢您的帮助;

4

0 回答 0