推荐.NET教程: ASP.NET C# 开发环境 Ajax教程 控件开发 统计报表 数据库 Web服务 安装部署 CommunityServer NHibernate DataGrid/GridView 实用代码 VS2005
示例源码 MVC/三层 SqlHelper 入门源码 开源 CMS Ajax/Atlas C#.net 毕业设计 源码 经典代码 商业 本站作品 持久层 随书源码 WebService 英文/汉化 Asp.net2.0

阿牛·乐园

每天进步一点点

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  80 随笔 :: 14 文章 :: 389 评论 :: 13 引用
    public partial class Form1 : Form
    
{
        
public Form1()
        
{
            InitializeComponent();
        }


        
private void Form1_Load(object sender, EventArgs e)
        
{
            Demo d 
= new Demo();
            d.a 
= 5;
            d.b 
= 10;
            d.c 
= new byte[]{1,2,3};
            d.s 
= "123";
            
byte[] buf = RawFormatter.RawSerialize(d);

            

            MessageBox.Show(
"aaa");
            
        }

    }


    [StructLayout(LayoutKind.Sequential,Pack
=1,CharSet=CharSet.Ansi)]
    
struct Demo
    
{
        
public byte a;
        
public int b;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst 
= 3)]
        
public byte[] c;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst 
= 5)]
        
public string s;
    }


    
public class RawFormatter
    
{
        
public static byte[] RawSerialize(object anything)
        
{
            
int rawsize = Marshal.SizeOf(anything);
            IntPtr buffer 
= Marshal.AllocHGlobal(rawsize);
            Marshal.StructureToPtr(anything, buffer, 
false);
            
byte[] rawdatas = new byte[rawsize];
            Marshal.Copy(buffer, rawdatas, 
0, rawsize);
            Marshal.FreeHGlobal(buffer);
            
return rawdatas;
        }


        
public static object RawDeserialize(byte[] rawdatas, Type anytype)
        
{
            
int rawsize = Marshal.SizeOf(anytype);
            
if (rawsize > rawdatas.Length)
                
return null;
            IntPtr buffer 
= Marshal.AllocHGlobal(rawsize);
            Marshal.Copy(rawdatas, 
0, buffer, rawsize);
            
object retobj = Marshal.PtrToStructure(buffer, anytype);
            Marshal.FreeHGlobal(buffer);
            
return retobj;
        }

    }

posted on 2007-08-22 13:55 阿牛 阅读(74) 评论(1)  编辑 收藏 网摘 所属分类: C#

评论

天书奇谈!
  回复  引用    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
Google站内搜索

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》



相关文章:

相关链接: