读书人

怎么获取这个自定义结构体的大小

发布时间: 2012-01-02 22:40:04 作者: rapoo

如何获取这个自定义结构体的大小
有一个自定义结构体:

C# code
public struct TimeYS                    {    public int Year;    public int Month;    public int Day;    public int Hour;    public int Minute;    public int Second;}public struct BExtrTypeHrmnCntRt{    public TimeYS Tm;    [MarshalAs(UnmanagedType.ByValArray, SizeConst=51)]    public float[]   MxAN;        //A相最大含有率    [MarshalAs(UnmanagedType.ByValArray, SizeConst=51)]    public TimeYS[]  MxTmAN;      //A相最大含有率发生时间    [MarshalAs(UnmanagedType.ByValArray, SizeConst=51)]    public float[]   MnAN;        //A相最小含有率    [MarshalAs(UnmanagedType.ByValArray, SizeConst=51)]    public TimeYS[]  MnTmAN;      //A相最小含有率发生时间    [MarshalAs(UnmanagedType.ByValArray, SizeConst=51)]    public float[]   MxBN;        //B相最大含有率    [MarshalAs(UnmanagedType.ByValArray, SizeConst=51)]    public TimeYS[]  MxTmBN;      //B相最大含有率发生时间    [MarshalAs(UnmanagedType.ByValArray, SizeConst=51)]    public float[]   MnBN;        //B相最小含有率    [MarshalAs(UnmanagedType.ByValArray, SizeConst=51)]    public TimeYS[]  MnTmBN;      //B相最小含有率发生时间    [MarshalAs(UnmanagedType.ByValArray, SizeConst=51)]    public float[]   MxCN;        //C相最大含有率    [MarshalAs(UnmanagedType.ByValArray, SizeConst=51)]    public TimeYS[]  MxTmCN;      //C相最大含有率发生时间    [MarshalAs(UnmanagedType.ByValArray, SizeConst=51)]    public float[]   MnCN;        //C相最小含有率    [MarshalAs(UnmanagedType.ByValArray, SizeConst=51)]    public TimeYS[]  MnTmCN;      //C相最小含有率发生时间}


当用Marshal.SizeOf(typeof(BExtrTypeHrmnCntRt))获取这个结构体长度时,却提示错误,请问该如何获取这样的结构体长度,或者说将这种结构体转成byte数组?谢谢

[解决办法]
vs2005 .NET2.0编译通过!
C# code
using System;using System.Collections.Generic;using System.Text;[color=#FF0000]using System.Runtime.InteropServices;[/color]namespace ConsoleApplication1{    public struct TimeYS    {        public int Year;        public int Month;        public int Day;        public int Hour;        public int Minute;        public int Second;    }    public struct BExtrTypeHrmnCntRt    {        public TimeYS Tm;        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 51)]        public float[] MxAN;        //A相最大含有率        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 51)]        public TimeYS[] MxTmAN;      //A相最大含有率发生时间        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 51)]        public float[] MnAN;        //A相最小含有率        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 51)]        public TimeYS[] MnTmAN;      //A相最小含有率发生时间        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 51)]        public float[] MxBN;        //B相最大含有率        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 51)]        public TimeYS[] MxTmBN;      //B相最大含有率发生时间        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 51)]        public float[] MnBN;        //B相最小含有率        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 51)]        public TimeYS[] MnTmBN;      //B相最小含有率发生时间        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 51)]        public float[] MxCN;        //C相最大含有率        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 51)]        public TimeYS[] MxTmCN;      //C相最大含有率发生时间        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 51)]        public float[] MnCN;        //C相最小含有率        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 51)]        public TimeYS[] MnTmCN;      //C相最小含有率发生时间    }    class Program    {        static void Main(string[] args)        {            Console.WriteLine(Marshal.SizeOf(typeof(BExtrTypeHrmnCntRt))); //输出8592            Console.ReadLine();        }    }} 

读书人网 >C#

热点推荐