或者以你上面的代码的话, 你可以用: 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;
不要使用引用类型的BYTE参数
C++中的指针在C#中改为INT型进行传输
lpNext = Marshal.PtrToStructure(lpNext.Next)
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;
}}