日期:2014-05-17  浏览次数:20886 次

关于StructLayoutAttribute类的疑问
新换了一个工作,遇到了软件和硬件使用Socket交换信息,而信息形式则是使用的byte数组,但是在熟悉代码的时候,却发现了这么一段代码。
C# code

    /// <summary>
    /// 信息头
    /// </summary>
    [Serializable]
    [StructLayoutAttribute(LayoutKind.Sequential,CharSet.Ansi,Pack=1)]
    public struct MessageHead
    {
        /// <summary>
        /// 功能码枚举
        /// </summary>
        [System.Runtime.InteropServices.MarshalAs(UnmanagedType.U1,SizeConst=1)]
        public byte OperationCode;

        /// <summary>
        /// 数据类型
        /// </summary>
        [System.Runtime.InteropServices.MarshalAs(UnmanagedType.U1,SizeConst=1)]
        public byte DataType;

        /// <summary>
        /// 帧ID号
        /// </summary>
        [System.Runtime.InteropServices.MarshalAs(UnmanagedType.U2,SizeConst=2)]
        public ushort FrameID;

        /// <summary>
        /// 保留(存储返回结果)
        /// </summary>
        [System.Runtime.InteropServices.MarshalAs(UnmanagedType.U1,SizeConst=1)]
        public byte Retain;

        /// <summary>
        /// 数据长度
        /// </summary>
        [System.Runtime.InteropServices.MarshalAs(UnmanagedType.U4,SizeConst=4)]
        public uint DataLength;
         
    }


实际效果是这个结构可以使用Marshal等类中的方法转换为一个byte数组,虽然知道了怎么使用,但是却不太明白是怎么一回事,在MSDN上也是很简单的写了一句话“类使用户可以控制类或结构的数据字段的物理布局”。
这个类到底是怎么样的一个机制,哪位高人可以给详细的说明一下,或者给一些相关的资料。

------解决方案--------------------
非托管封送,如果帮助你还理解不了,我们也没有什么语言让你明白,你甚至可以记住他,知道什么时候用也可以