zoukankan      html  css  js  c++  java
  • C# 的内存拷贝

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

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

       //宋冰的代码
        /// <summary>
        /// 内存复制。
        /// </summary>
        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);

                    return bytes;
                }
                finally
                {
                    Marshal.FreeHGlobal(buffer);
                }

            }

            //2、Byte[]转换为struct
            public static Object BytesToStruct(Byte[] bytes, Type strcutType)
            {
                Int32 size = Marshal.SizeOf(strcutType);
                IntPtr buffer = Marshal.AllocHGlobal(size);

                try
                {
                    Marshal.Copy(bytes, 0, buffer, size);

                    return Marshal.PtrToStructure(buffer, strcutType);
                }
                finally
                {
                    Marshal.FreeHGlobal(buffer);
                }
            }

        }

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

  • 相关阅读:
    debian7安装oracle11g
    unix fopen和fopen_s用法的比较
    QT的三种协议说明
    Qt之遍历文件夹
    Debian 7 安装配置总结
    用户不在sudoers文件中的解决方法 .
    QT断点续传
    QFtp类参考
    FTP服务器简易有效的访问方法
    Java爬虫搜索原理实现
  • 原文地址:https://www.cnblogs.com/Yjianyong/p/1792976.html
Copyright © 2011-2022 走看看