//结构体定义
        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]//CharSet.Unicode也是此异常
        public struct LoginResponseTerStruct
        {
            /// <summary>
            /// 头信息
            /// </summary>
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)]
            public byte Head;
            ……
        }
      int size = Marshal.SizeOf(typeof(LoginResponseTerStruct));
      /*
        此处异常:类型LoginResponseTerStruct不能作为非托管结构进行封送处理;无法计算有意义的大小或偏移量
       */
求教!

解决方案 »

  1.   

            [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]//CharSet.Unicode也是此异常
            public struct LoginResponseTerStruct
            {
                /// <summary>
                /// 头信息
                /// </summary>
                [MarshalAs(UnmanagedType.I1, SizeConst = 1)]
                public byte Head;        }        static void Main(string[] args)
            {            int size = Marshal.SizeOf(typeof(LoginResponseTerStruct));            Console.WriteLine(size);
      

  2.   

    把UnmanagedType.ByValArray 改成 UnmanagedType.I1输出结果为: 1
      

  3.   

    UnmanagedType 枚举
    I1 --> 1 字节带符号整数。 
    ByValArray -->当 MarshalAsAttribute.Value 设置为 ByValArray 时,必须设置 SizeConst 以指示数组中的元素数。当需要区分字符串类型时,ArraySubType 字段可以选择包含数组元素的 UnmanagedType。此 UnmanagedType 只可用于作为结构中的字段的数组。 msdn
      

  4.   

    C++的结构放上来看看先,你的Header是指针还是一个Byte需要先明确.
      

  5.   

    改成I1依旧是这么个错误。。经过测试,有这一段就出问题            [MarshalAs(UnmanagedType.I1, SizeConst = 15)]
                public byte[] GoHea;
      

  6.   

    改成
                [MarshalAs(UnmanagedType.ByValArray, SizeConst = 15)]
                public byte[] GoHea;-----------------------
    public byte Head;
    对应的是[MarshalAs(UnmanagedType.I1, SizeConst = 1)],我没让你全改这个啊,
    public byte[] GoHea;是数组,对应UnmanagedType.ByValArray//看看那个msdn的链接,介绍很详细
      

  7.   

    去掉 [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)]参考:
    http://www.cnblogs.com/blue-th/articles/1295180.html
      

  8.   

    [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]//CharSet.Unicode也是此异常
      public struct LoginResponseTerStruct
      {
      /// <summary>
      /// 头信息
      /// </summary>
      [MarshalAs(UnmanagedType.I1, SizeConst = 1)]
      public byte Head;  }  static void Main(string[] args)
      {  int size = Marshal.SizeOf(typeof(LoginResponseTerStruct));  Console.WriteLine(size);