C#中的结构体很少用,一般用class
结构体是值类型传递。
- public unsafe struct VCI_CAN_OBJ //CAN每帧对象,
- {
- public uint ID;// 帧ID。 【u32】帧id,数据格式为靠右对齐。 详情请参照: 《8.附件1: ID对齐方式.pdf》说明文档。
- public uint TimeStamp; //【u32】设备时间标识。 时间标示从CAN卡上电开始计时,计时单位为0.1ms。
- public byte TimeFlag; //是否使用时间标识,=1时TimeStamp有效
- public byte SendType; //发送类型。=0时为正常发送(发送失败会自动重发,重发超时时间为4秒, 4秒内没有发出则取消);=1时为单次发送
- public byte RemoteFlag; //是否远程帧标志。 =0时为数据帧, =1时为远程帧(数据段空)。
- public byte ExternFlag; //是否扩展帧标志。 =0时为标准帧(11位ID), =1时为扩展帧(29位ID)。
- public byte DataLen; //有效字节 DLC (<=8),即CAN帧Data有几个字节。约束了后面Data[8]中有效字节数。
- public fixed byte Data[8]; //数据包,如DataLen定义为3,即Data[0]、 Data[1]、 Data[2]是有效的。
- public fixed byte Reserved[3];//系统保留。
- }
-
- fixed是固定的意思
-
-
- //====================================
-
- public struct VCI_BOARD_INFO //主板信息
- { // VCI_ReadBoardInfo【要先运行VCI_OpenDevice(4,0,0);】 VCI_FindUsbDevice2
- public UInt16 hw_Version;//【0x0900】硬件版本,比如0x0100表示V1.00。
- public UInt16 fw_Version;//【0x0341】固件版本,v3.41
- public UInt16 dr_Version;//【0x0900】驱动版本,
- public UInt16 in_Version;//【0x0905】接口版本,
- public UInt16 irq_Num;// 【0x00】 保留参数。
- public byte can_Num; // 【0x02】 表示有几路CAN通道。
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
- public char[] str_Serial_Num;// 板卡序列号。【31F01031C93】
-
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 40)]
- public char[] str_hw_Type;// 硬件类型【55 53 42 43 41 4e 2d 49 49】“USBCAN-II”
-
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
- public UInt16[] Reserved;// 系统保留。
- }
- typedef struct _VCI_CAN_OBJ
- {
- UINT ID;
- UINT TimeStamp;
- BYTE TimeFlag;
- BYTE SendType;
- BYTE RemoteFlag;
- BYTE ExternFlag;
- BYTE DataLen;
- BYTE Data[8];
- BYTE Reserved[3];
- }VCI_CAN_OBJ, *PVCI_CAN_OBJ;
-
- //定义了结构体,还定义了指针
-
- // *是解指针,用于获取对象
-
- // &是取指针,用于取对象地址,【注意,这个指针是有类型的】