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#中的實現以下: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)]加到變量前面,指定數組長度視頻

相關文章
相關標籤/搜索