C#内存复制结构
C++中定义结构如下,需要转化成C#的结构
typedef struct tagNET_DVR_CID_ALARM
{
DWORD dwSize;
BYTE sCIDCode[CID_CODE_LEN/*4*/]; //CID事件号
BYTE sCIDDescribe[NAME_LEN/*32*/]; //CID事件名
NET_DVR_TIME_EX struTriggerTime; //触发报警的时间点
NET_DVR_TIME_EX struUploadTime; //上传报警的时间点
BYTE sCenterAccount[ACCOUNTNUM_LEN/*6*/]; //中心帐号
BYTE byReportType; //见定义NET_DVR_ALARMHOST_REPORT_TYPE
BYTE byUserType; //用户类型,0-网络用户 1-键盘用户,2-手机用户,3-系统用户
BYTE sUserName[NAME_LEN/*32*/]; //网络用户用户名
WORD wKeyUserNo; //键盘用户号 0xFFFF表示无效
BYTE byKeypadNo; //键盘号 0xFF表示无效
BYTE bySubSysNo; //子系统号 0xFF表示无效
WORD wDefenceNo; //防区号 0xFFFF表示无效
BYTE byVideoChanNo; //视频通道号 0xFF表示无效
BYTE byDiskNo; //硬盘号 0xFF表示无效
WORD wModuleAddr; //模块地址 0xFFFF表示无效
BYTE byCenterType; //0-无效, 1-中心账号(长度6),2-扩展的中心账号(长度9)
BYTE byRes1;
BYTE sCenterAccountV40[ACCOUNTNUM_LEN_32/*32*/]; //中心账号V40,使用此字段时sCenterAccount无效
BYTE byRes2[28];
}NET_DVR_CID_ALARM, *LPNET_DVR_CID_ALARM;
C++结构中有指定长度的BYTE数组,C#中的实现如下:
[StructLayoutAttribute(LayoutKind.Sequential)]
public struct NET_DVR_CID_ALARM
{
public uint dwSize;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
public byte[] sCIDCode; //CID事件号
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
public byte[] sCIDDescribe; //CID事件名
NET_DVR_TIME_EX struTriggerTime; //触发报警的时间点
NET_DVR_TIME_EX struUploadTime; //上传报警的时间点
public byte sCenterAccount; //中心帐号
public Byte byReportType; //见定义NET_DVR_ALARMHOST_REPORT_TYPE
public Byte byUserType; //用户类型,0-网络用户 1-键盘用户,2-手机用户,3-系统用户
public byte sUserName; //网络用户用户名
public ushort wKeyUserNo; //键盘用户号 0xFFFF表示无效
public Byte byKeypadNo; //键盘号 0xFF表示无效
public Byte bySubSysNo; //子系统号 0xFF表示无效
public ushort wDefenceNo; //防区号 0xFFFF表示无效
public Byte byVideoChanNo; //视频通道号 0xFF表示无效
public Byte byDiskNo; //硬盘号 0xFF表示无效
public ushort wModuleAddr; //模块地址 0xFFFF表示无效
public Byte byCenterType; //0-无效, 1-中心账号(长度6),2-扩展的中心账号(长度9)
public Byte byRes1;
public byte sCenterAccountV40; //中心账号V40,使用此字段时sCenterAccount无效
public byte byRes2;
}
用[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]加到变量前面,指定数组长度