#region" 结构体struct与字节数组 byte[] 的转换 "        /// 结构体转byte数组
        /// </summary>
        /// <param name="structObj">要转换的结构体</param>
        /// <returns>转换后的byte数组</returns>
        public static byte[] StructToBytes(object structObj)
        {
           byte[] bytes;
            try 
        {         
        //得到结构体的大小
                int size = Marshal.SizeOf(structObj);
                //创建byte数组
                 bytes = new byte[size];
                //分配结构体大小的内存空间
                IntPtr structPtr = Marshal.AllocHGlobal(size);
                //将结构体拷到分配好的内存空间
                Marshal.StructureToPtr(structObj, structPtr, false);
                //从内存空间拷到byte数组
                Marshal.Copy(structPtr, bytes, 0, size);
                //释放内存空间
                Marshal.FreeHGlobal(structPtr);
                //返回byte数组
                return bytes;
        }
        catch (Exception ex)
        {
                mbox.msgbox(ex.Message);
                //LogWriter.AddSystemException(ex);
                return bytes = null;
        }
            
        }        /// byte数组转结构体
        /// </summary>
        /// <param name="bytes">byte数组</param>
        /// <param name="type">结构体类型</param>
        /// <returns>转换后的结构体</returns>
        public static object BytesToStuct(byte[] bytes, Type type)
        {
           object obj;
            //try 
            //{
                //得到结构体的大小
           //mbox.msgbox(type.FullName);
           int size = Marshal.SizeOf(type);
                //byte数组长度小于结构体的大小
                if (size > bytes.Length)
                {
                    //返回空
                    return null;
                }
                //分配结构体大小的内存空间
                IntPtr structPtr = Marshal.AllocHGlobal(size);
                //将byte数组拷到分配好的内存空间
                Marshal.Copy(bytes, 0, structPtr, size);
                //将内存空间转换为目标结构体
                obj = Marshal.PtrToStructure(structPtr, type);
                //释放内存空间
                Marshal.FreeHGlobal(structPtr);
                //返回结构体
                return obj;
            //}
            //catch (Exception ex)
            //{
            //    mbox.msgbox(ex.Message);
            //    LogWriter.AddSystemException(ex);
            //    return obj = null;
            //}
        } /// <summary>
        /// 在SERVER LAN发的所有消息,DMT收到消息后,都要返回的确认消息表示已经收到
/// C++ 代码        ///  //unsigned char direct;0x01
        ///  //unsigned char category;  0x04
        ///  //unsigned char type;
        ///  //unsigned char GroupID;
        ///  //unsigned char DeviceID;
        ///  //unsigned char DeviceMAC[16];//    自己的MAC  Addr
        ///  //unsigned short PackNo;    //2008-02-19 添加,为了给发送的udp广播包统一添加包的序号(给发送的包编号,等待返回确认)
        ///  //unsigned byte ConfirmCMD;//把所有命令进行编号,从0x01开始,   SetPort ,QueryStatus,GetDisplayInfo,GetDiskSpaceInfo在刷新时不考虑???
        ///  //unsigned byte Recv;// 收到命令后的执行状态0: 收到但还没执行或是不需要执行的命令消息 |||  1: 执行成功 ||| 2:执行不成功
        /// </summary>
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 4)]
        public struct ConfirmMSG
        {
            public byte direct;
            public byte category;
            public byte type;
            public byte GroupID;
            public byte DeviceID;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
            public byte[] MAC;
            public ushort PackNo;  
            public byte ConfirmCMD;
            public ushort Recv;
        }
给你参考

解决方案 »

  1.   

     PTempCard = ^TTempCard;  
      TTempCard = record  
        Enabled: Boolean;           //Enabled Flag  
        reserved: byte;             //reserved  
        CardNumber : TCardNumber;   //Card No.  
        reserved1: Word;            //reserved  
        pNext: PTempCard;           //pointer to the next temp card.  
      end;  
     pNext: PTempCard;           //pointer to the next temp card.  
    关键是这一句怎么弄
      

  2.   

    have a try!
    class TTempCard 
       bool Enabled;
       byte reserved;
       TCardNumber CardNumber;
       ushort reserved1;   
       TTempCard pNext; 
    }
      

  3.   


    用 class不行也  要用STRUCT
      

  4.   


    [StructLayout(LayoutKind.Sequential)]
    struct TTempCard
    {  
       bool Enabled; 
       byte reserved; 
       TCardNumber CardNumber; 
       ushort reserved1;    
       IntPtr pNext;  
    }