zoukankan      html  css  js  c++  java
  • 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)]加到变量前面,指定数组长度

  • 相关阅读:
    myBatis之事务管理
    关于Spring事务回滚的问题
    mysql中的多行查询结果合并成一个
    mybatis传递参数到mapping.xml
    EasyUI 中 DataGrid 控件 列 如何绑定对象中的属性
    写给java开发的运维笔记
    SpringMVC学习系列(11) 之 表单标签
    eclipse 安装svn插件
    linux(centos)搭建SVN服务器
    JavaServer Faces 2.0 can not be installed解决方案
  • 原文地址:https://www.cnblogs.com/yangxk666/p/5987710.html
Copyright © 2011-2022 走看看