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#中的實現以下:ide
[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;
}ui
用[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]加到變量前面,指定數組長度視頻