C# 的内存拷贝

From: http://www.cnblogs.com/Yjianyong/archive/2010/08/05/1792976.html

近段时间在C#是直接调用动态库比较多,由于有时又需要使用ActiveX控件,往往出现很多的同名的不同命名空间的类,结构等,对不同实体之类的转换是很烦的一件事,于是考虑到内存直接拷贝。

下面是同事宋冰实现的代码,经他本人同意,供大家分享。

public static class StructCopyer{// 相当于序列化与反序列化,但是不用借助外部文件//1、struct转换为Byte[]public static Byte[] StructToBytes(Object structure){Int32 size = Marshal.SizeOf(structure);IntPtr buffer = Marshal.AllocHGlobal(size);             // 从进程的非托管内存中分配内存try{Marshal.StructureToPtr(structure, buffer, false);   // 将数据从托管对象封送到非托管内存块Byte[] bytes = new Byte[size];Marshal.Copy(buffer, bytes, 0, size);               // 将数据从非托管内存复制到托管8位无符号整数数组return bytes;}finally{Marshal.FreeHGlobal(buffer);                        // 释放从非托管内存中分配的内存}}//2、Byte[]转换为structpublic static Object BytesToStruct(Byte[] bytes, Type strcutType){Int32 size = Marshal.SizeOf(strcutType);IntPtr buffer = Marshal.AllocHGlobal(size);try{Marshal.Copy(bytes, 0, buffer, size);               // 将托管的8位无符号整数数组复制到非托管内存指针return Marshal.PtrToStructure(buffer, strcutType);  // 将数据从非托管内存块封送到指定类型的托管对象}finally{Marshal.FreeHGlobal(buffer);}}}

注:此处的类或结构必须是顺序和长度都相同。可以参考    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406773.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

也谈如何构建高性能服务端程序

引子:我接触过很多编程语言,接触过各种各样的服务器端开发,Java,Go,Ruby,Javascript等语言,Spring,Node.js,Rails等等常见服务器端框架和编程模型都有接触。这里谈一下我…

Mint-Ui的mt-search点击选中

<template><div class"page-search"><mt-search autofocus v-model"value" placeholder"搜索"> </mt-search><mt-cellv-for"item of filterResult":key"item":title"item"click.nativ…

毕业了!

忆往昔 论文犹如一座大山 日夜码字不知疲倦 写了半天改个没完 良辰美景于我何干 俱往矣 神马检索与期刊 能有几篇是真言 而今迈步从头越 翻过大山尽开颜

网络信息系统(NIS服务器)

分为两部分&#xff1a;一、服务器端配置&#xff1a;1&#xff0e;#检查包是否安装[rootVMLINUX2 shell3]# rpm -qa | grep ypserv ypserv-2.19-32&#xff0e;安装包文件 serv-2.19-3.i386.rpm[rootVMLINUX2 Server]# rpm -ivh ypserv-2.19-3.i386.rpm warning: ypse…

使用C#格式化字符串

From: http://hi.baidu.com/anxing_space/blog/item/6b31186dd6d1d7f942169468.html 今天在博客园上看到一片超赞的C#字符串格式的文章&#xff0c;是我看过最好的一个关于字符格式的文章&#xff0c;转来收藏&#xff0c;顺便向原作者flyingbread表示感谢和尊敬&#xff01; 1…

Tomcat提示Null component

Tomcat提示“严重: Null component Catalina:typeJspMonitor,namejsp,WebModule//localhost/,J2EEApplicationnone,J2EEServernone”错误&#xff0c; 然后无法启动&#xff0c; 这是因为 Tomcat 使用的 jre 版本比应用程序编译的 jre 版本低造成的。 需要把 Tomcat 使用的 jre…

vue如何返回上一页效果

如何通过点击的方式控制当前页返回到上一个路由页面&#xff1a; 1.在当前页面添加返回按钮 <div style"text-align: center"><el-button v-on:click"backHistory">取消</el-button> </div>2.在方法体内写back方法实现点击返回上…

理解 clip

参考 http://developer.51cto.com/art/201009/223326.htm http://vsfor.blog.51cto.com/4165449/1179853 http://www.zhangxinxu.com/wordpress/2011/04/css-cliprect%E7%9F%A9%E5%BD%A2%E5%89%AA%E8%A3%81%E5%8A%9F%E8%83%BD%E5%8F%8A%E4%B8%80%E4%BA%9B%E5%BA%94%E7%94%A8%E4…

机器学习算法基础概念学习总结

转自&#xff1a;http://blog.csdn.net/lantian0802/article/details/38333479 1.基础概念&#xff1a; (1) 10折交叉验证&#xff1a;英文名是10-fold cross-validation&#xff0c;用来测试算法的准确性。是常用的测试方法。将数据集分成10份。轮流将其中的9份作为训练数据&a…

CSS+DIV-设置表格与表单

6-1.html<html><head><title>年度收入</title><style><!--table{caption-side:bottom;}--></style></head><body> <table summary"This table shows the yearly income for years 2004 through 2007" bord…

寻路大数据:海量数据与大规模分析

寻路大数据&#xff1a;海量数据与大规模分析&#xff08;Google大数据专家力作超豪华译者|作序者真正梳理趋势与生态|方案与工具选型|应用场景与价值挖掘的独家内参&#xff09; 【美】Michael Manoochehri&#xff08;迈克尔.马诺切里&#xff09;著 戴志伟等 译 ISBN 978…

雷观(六):码农值千金

从事IT相关技术岗位&#xff0c;尤其是程序员或者说码代码的人&#xff0c;喜欢自称“码农”。可能的一个原因就是&#xff0c;IT中的Coder与建筑行业中的民工类似&#xff0c;Coder码代码&#xff0c;民工码砖头。小雷窃以为&#xff0c;自嘲是可以的&#xff0c;如果妄自菲薄…

CSS改变input光标颜色

在使用 input 输入框时&#xff0c;我们可能会遇到需要给其设置光标颜色的情况。谷歌浏览器的默认光标颜色是黑色的&#xff0c;GitHub 上的光标却是白色&#xff0c;那么这个用 CSS 怎么改变呢?   上面描述的情景有两种实现方式&#xff1a; 1.使用color来实现 光标的颜色…

Request 对象 错误 'ASP 0104 : 80004005' 解决方法

在windows server 2003下携带多个附件或者较大的附件进行发送时系统报错&#xff1a;Request 对象 错误 ASP 0104 : 80004005 不允许操作 /inc/config.asp&#xff0c;行 10 解决方法&#xff1a;我的电脑&#xff0c;管理&#xff0c;服务&#xff0c;停掉iis admin service&a…