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

C#内存复制结构的更多相关文章

  1. 【转载】HTTP Session 内存到内存复制的拓扑结构

    http://www.oschina.net/question/129540_23215 HTTP 协议本身是“连接 - 请求 - 应答 - 关闭连接”的模式,是一种无状态协议:然而随着 web 动态 ...

  2. nginx源码分析—内存池结构ngx_pool_t及内存管理

    Content 0. 序 1. 内存池结构 1.1 ngx_pool_t结构 1.2 其他相关结构 1.3 ngx_pool_t的逻辑结构 2. 内存池操作 2.1 创建内存池 2.2 销毁内存池 2 ...

  3. 关于fork函数中的内存复制和共享

    原来刚刚开始做linux下面的多进程编程的时候,对于下面这段代码感到很奇怪, #include<unistd.h> #include<stdio.h> #include< ...

  4. Java对象在内存的结构

    一.内存布局 对象在内存中存储的结构由三部分组成:对象头.实例数据.对齐填充. 对象头 MarkWord(标记字段):哈希码.分代年龄.锁标志位.偏向线程ID.偏向时间戳等信息.Mark Word被设 ...

  5. 深入理解JVM虚拟机1:JVM内存的结构与永久代的消失

    所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢?其实如果你经常解决服务器性能问题,那么这些问 ...

  6. postgresql 用 like 可以 复制结构包括主键约束

    create tabletablename ( like tablename INCLUDING INDEXES INCLUDING COMMENTS); PostgreSQL 动态表复制(CREAT ...

  7. 深入理解JVM虚拟机1:JVM内存的结构与消失的永久代

    本文转自互联网,侵删 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutori ...

  8. malloc分配内存的结构

    在C/C++,我们都可以使用malloc进行分配大小,单位是字节.   malloc实际分配的内存大小和传入的参数其实是不同的.   实际分配的内存大小>传入的参数大小. malloc分配的内存 ...

  9. 2014年1月9日 Oracle 内存与结构

    Oracle启动时为启动一个实例 主要为 实例 SVG 数据库文件 其它文件 1.Oracle:  内存 进程  其他文件 1.1 SVG内存(Cache)  1.1.1 共享池(Shared Poo ...

随机推荐

  1. .NET环境下的DPAPI加密编程

    Windows的本地加密保护机制提供了简单的调用接口,密钥的生成.保护等事项一概由系统来处理,其编程接口称为DPAPI.这一加密保护机制的边界是用户登录帐户或者本地计算机系统,使用操作系统设定的加密处 ...

  2. bzoj 5319: [Jsoi2018]军训列队

    Description Solution 最优情况可以是所有人按位置从小到大排序之后依次占到自己 \(K+\) 排名的位置上去 因为每一个休息位置不同,那么一定递增,所以一定存在一个分界点,左边的是往 ...

  3. Html上传大文件

    1. <input type="file" id="file" /> <progress id="></progress ...

  4. cs端调用webApi

    public class Httphelper { public static string Post1(string url, string postString) { using (WebClie ...

  5. storm之topology的启动

    一个topology的启动包括了三个步骤 1)创建TopologyBuilder,设置输入源,输出源 2)获取config 3)提交topology(这里不考虑LocalCluster本地模式) 以s ...

  6. 阿里Java开发电话面试经历--惨败

    近期准备跳槽,想试试知名大企业--阿里.经过boss直聘上一些内部人员的内推,有幸获得了一次电话面试的机会.(虽然在面试开始之前就大概知道结果是如何,但是也总得试试自己个有多水,哈哈哈...) 跟大家 ...

  7. 关于利用MQ实现分布式事务的想法【转】

    转自:https://www.jianshu.com/p/bafb09954f18 假设:消息服务不丢消息 场景 服务A 服务B 服务C 消息服务Q 伪代码 服务A中 transaction{ A本地 ...

  8. 前端(五):JavaScript面向对象之内建对象

    一.数据类型 js中数据类型分为两种,原始数据累次能够和引用数据类型. 1.原始数据类型 Undefined.Null.Boolean.Number.String是js中五种原始数据类型(primit ...

  9. python中字符串(str)常用操作总结

    # 字符串的常用操作方法 (都是形成新的字符串,与原字符串没有关系.) 1.字符串的基本操作之切片 s = 'python hello word' # 取首不取尾,取尾要+1 # 切片取出来的字符串与 ...

  10. 记录开发Nodejs c++ addon的一些经验(二、数据类型的转换(尤其是Buffer))

    常见的数据类型的转换基本比较容易,结合nan应该不是一件难事 参考链接: http://blog.jobbole.com/109598/ http://deadhorse.me/nodejs/2012 ...