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)]加到变量前面,指定数组长度