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)]加到變量前面,指定數組長度

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章