建议再写一个C++ dll调用该函数。把结构体分解以便C#调用。

解决方案 »

  1.   

    参数类型有问题
    不要使用引用类型的BYTE参数
    C++中的指针在C#中改为INT型进行传输
      

  2.   

    sorry 上面有错误
    lpNext = Marshal.PtrToStructure(lpNext.Next)
      

  3.   

    或者以你上面的代码的话, 你可以用:
    unsafe
    {
      DPU3001.PEvent lpNext = ......
      //code.....
      ..........
      lpNext = (DPU3001.PEvent*)lpNext.pNext.ToPointer();
    }
    //=====================================================
    或者:
    [StructLayout(LayoutKind.Sequential)]
    public struct TCardNumber
    {
      public int id;
      /.....
    }
    [StructLayout(LayoutKind.Sequential)]
    unsafe public struct _Event
    {
      public byte Code;
      public byte DotID;
      public TCardNumber CardNumber;
      public ushort reserved;
      public SYSTEMTIME Time;
    //IntPtr PEvent;
      public _Event* PEvent;
    }
    [StructLayout(LayoutKind.Sequential)]
    public struct SYSTEMTIME
    {
     public ushort wYear;
     public ushort wMonth;
     public ushort wDayofWeek;
     public ushort wDay;
     public ushort wHour;
     public uShort wMinute;
     public ushort wSecond;
     public ushort wMilliseconds;
    }{
      //...............
      unsafe
    {
      lPNext = lpNext->pNext;
     
    }}