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)]加到变量前面,指定数组长度
C#内存复制结构的更多相关文章
- 【转载】HTTP Session 内存到内存复制的拓扑结构
http://www.oschina.net/question/129540_23215 HTTP 协议本身是“连接 - 请求 - 应答 - 关闭连接”的模式,是一种无状态协议:然而随着 web 动态 ...
- 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 ...
- 关于fork函数中的内存复制和共享
原来刚刚开始做linux下面的多进程编程的时候,对于下面这段代码感到很奇怪, #include<unistd.h> #include<stdio.h> #include< ...
- Java对象在内存的结构
一.内存布局 对象在内存中存储的结构由三部分组成:对象头.实例数据.对齐填充. 对象头 MarkWord(标记字段):哈希码.分代年龄.锁标志位.偏向线程ID.偏向时间戳等信息.Mark Word被设 ...
- 深入理解JVM虚拟机1:JVM内存的结构与永久代的消失
所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢?其实如果你经常解决服务器性能问题,那么这些问 ...
- postgresql 用 like 可以 复制结构包括主键约束
create tabletablename ( like tablename INCLUDING INDEXES INCLUDING COMMENTS); PostgreSQL 动态表复制(CREAT ...
- 深入理解JVM虚拟机1:JVM内存的结构与消失的永久代
本文转自互联网,侵删 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutori ...
- malloc分配内存的结构
在C/C++,我们都可以使用malloc进行分配大小,单位是字节. malloc实际分配的内存大小和传入的参数其实是不同的. 实际分配的内存大小>传入的参数大小. malloc分配的内存 ...
- 2014年1月9日 Oracle 内存与结构
Oracle启动时为启动一个实例 主要为 实例 SVG 数据库文件 其它文件 1.Oracle: 内存 进程 其他文件 1.1 SVG内存(Cache) 1.1.1 共享池(Shared Poo ...
随机推荐
- python输出不换行
python输出不换行 Python2的写法是: print 'hello', Python3的写法是: print('hello', end='') 对于python2和python3都兼容的写法是 ...
- C#操作Redis String字符串
/// <summary> /// Redis String 操作 /// </summary> public static void Redis_String() { Red ...
- Java中final修饰参数的作用
在方法参数前面加final关键字就是为了防止数据在方法体中被修改. 主要分两种情况:第一,用final修饰基本数据类型:第二,用final修饰引用类型. 第一种情况,修饰基本类型(非引用类型).这时参 ...
- php中array_walk() 和 array_map()两个函数区别
两个函数的共性和区别: 1.传入这两个函数的 $value,就是数组中的单一个元素. 2.array_walk() 仅返回true或者false,array_map() 返回处理后的数组: 3.要得到 ...
- Visual Studio Code 的使用
常用快捷键 常用General 按 Press 功能 Function Ctrl + Shift + P,F1 显示命令面板 Show Command Palette Ctrl + P 快速打开 Qu ...
- javaweb之请求的转发和重定向
1.什么是请求转发和请求重定向? 请求转发: xxServlet收到请求,然后直接转发给yyServlet,然后yyServlet返回给客户端.整个过程中,客户端发出一个请求,收到一个响应. 重定向: ...
- eclipse切换workspace后配置问题
正常情况下如果切换了eclipse的workspace后,需要重新配置eclipse,但是可以将原工作目录中的.metadata/.plugins/org.eclipse.core.runtime拷贝 ...
- springMVC @Component-@Resource-@Repository-@Service-@Controller的区别和理解
作用: @Component------------------------泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注.(Component-------成分; 组分; 零件) @R ...
- js权威指南学习笔记(一)类型、值和变量
1.数据类型:原始类型(primitive type) 和对象类型(object type) 原始类型包括数字.字符串和布尔值: 除数字.字符串.布尔值.null(空).undefined(未定义), ...
- Git学习-Git配置(一)
零.前言 Git是一个工具,就没必要把时间浪费在那些"高级"但几乎永远不会用到的命令上.一旦你真的非用不可了,到时候再自行Google或者请教专家也未迟. 如果你是一个开发人员,想 ...