最后一个不是指针么
用 Marshal.PtrToStructure(IntPtr, Type) 
将内存拷贝到一个结构体里面,就可以了.

解决方案 »

  1.   

    我也想到这个方法了,但没用成功,我把我的代码贴出来,麻烦您帮我看看:
    我的结构:
     [StructLayout(LayoutKind.Sequential)]
        public struct PEvent
        {
            public byte Code;
            public byte DotID;
            public TCardNumber CardNumber;
            public ushort reserved;
            public Time Time;
            public IntPtr pNext;
        }
     public void GetEvent()
               {
                byte Bagid=this.SEventBagId;
                byte EventCount = this.SEventCount;
                int rs = 0; string Str = ""; int i = 0;
                EkcoTog.PEvent Event = new EkcoTog.PEvent();
                EkcoTog.PEvent lpNext = new EkcoTog.PEvent();
                try
                {
                    Bagid = SEventBagId;
                    EventCount = SEventCount;
                   // MessageBox.Show("success");
                    rs = EkcoTog.DPU3001_Dll.NT_GetEvent(LineID, CtrlID, ref Bagid, ref EventCount, ref Event);
                    this.listBox1.Items.Add(rs.ToString());
                    if (rs == 0)
                    {
                        SEventBagId = Bagid; //Save event package number for next time
                        SEventCount = EventCount;  //Save event count for next time
                             EkcoTog.PEvent[] Sevent = new PEvent[EventCount];
                        string str = "Bag ID:" + Bagid.ToString() + "EventCount:" + EventCount.ToString();
                        this.listBox1.Items.Add(str);
                        lpNext = Event;
                        for (i = 0; i < EventCount; i++)
                        {                     
                            int m = i + 1;
                            Str += m.ToString() + " DateTime:" + lpNext.Time.wMonth.ToString() + "-" + lpNext.Time.wDayOfWeek.ToString() + "-" + lpNext.Time.wHour.ToString();
                            Str += " " + lpNext.Time.wMinute.ToString() + ":" + lpNext.Time.wSecond.ToString() + ":" + lpNext.Time.wMilliseconds.ToString();
                            Str += " Event Code:" + lpNext.Code.ToString();
                            Str += " Component Address:" + lpNext.DotID.ToString();
                            Str += " Card Offset: " + lpNext.CardNumber.dwCardNo.ToString() + "   THIS IS END!"+lpNext.pNext.ToString();
                            this.listBox1.Items.Add(Str);
                            //lpNext.pNext = Event.pNext;
                            //lpNext = ptr;
                            // lpNext = lpNext.pNext.ToPointer();
                            //IntPtr p = lpNext.pNext;
                            //lpNext.pNext = IntPtr.Zero;
                            IntPtr ptr = Marshal.ReadIntPtr(Event, i);
                            Sevent[i] = (PEvent)Marshal.PtrToStructure(Event.pNext, typeof(PEvent));
                            return;
                        }
                    }
                    if (rs == 133)
                    {
                        this.listBox1.Items.Add("所有事件都已经上载,没有新事件!");
                    }
                    else
                    {
                        this.listBox1.Items.Add("获取事件失败!" + rs.ToString());
                    }
                }
                catch
                {
                    //  this.listBox1.Items.Add("WW!");
                }
               }
      

  2.   


    Marshal.PtrToStructure(Event.pNext, Event );
      

  3.   

    能不能具体点啊
    Marshal.PtrToStructure(Event.pNext, Event );