在msdn,上,我看到,它是这样解释的 StructLayout.Auto 运行库自动为非托管内存中的对象的成员选择适当的布局。使用此枚举成员定义的对象不能在托管代码的外部公开。尝试这样做将引发异常。  
Q:"使用此枚举成员定义的对象不能在托管代码的外部公开",公开是啥个意思啊?Explicit 对象的各个成员在非托管内存中的精确位置被显式控制。每个成员必须使用 FieldOffsetAttribute 指示该字段在类型中的位置。 
Q: “指示该字段在类型中的位置”有啥意义啊?StructLayout.Sequential 对象的成员按照它们在被导出到非托管内存时出现的顺序依次布局。这些成员根据在 StructLayoutAttribute.Pack 中指定的封装进行布局,并且可以是不连续的。Q:“StructLayoutAttribute.Pack 中指定的封装”代表什么啊?最后一个问题:
控制对象在非内存的位置有啥意义啊?

解决方案 »

  1.   

    No body can answer this?
      

  2.   

    StructLayout.Auto  .net自动安排内存布局,.net 中的类实际上都是使用这种布局的。也就说你无法控制类成员的布局,不同于C++。所以在调用非托管代码是不能用这个,否则肯定出错。
    Explicit 
    你自己强制安排类字段布局,当PInvoke时肯定要用这个,你自己强制指定排列方式,以与C中的结构定义相匹配。
    StructLayout.Sequential 就很好理解了吧。
    StructLayoutAttribute.Pack实际就是字节对齐方式。C++中有对等的东西。控制对象在非内存的位置有啥意义啊?
    边界对齐,提高访问效率。