[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]//按一字节对齐
        public struct update_SOH
        {
            public short UpDataNodeID;
            public byte UpSOHType;
            public byte UpSOHSeq;
            public int UpSOHAddr;
            public byte UpSOHLen;
            public byte[] UpSOHData; 
        }
        public static  void Main(string[] args)
        {
            update_SOH soh = new update_SOH();
            soh .UpSOHData =new byte [48];
            Console.WriteLine(Marshal .SizeOf (soh));
        }
如上代码,soh .UpSOHData =new byte [48];此句不管我定义的是48还是其他任意整数,Marshal .SizeOf (soh)结果都是13,也就是soh .UpSOHData =new byte [48]的长度是4,不知道为什么,应该怎么写。求各位高手帮忙!

解决方案 »

  1.   

    唉,问题自己解决了!是从http://soft.chinabyte.com/database/52/11361052.shtml得到的提示。
    应该加一句[MarshalAs(UnmanagedType.ByValArray, SizeConst = 48)] 在public byte[] UpSOHData;之前。
    把该问题解决的方法贴出来,供大家参考。
      

  2.   

    原因解释:
    public byte[] UpSOHData;  编译器会弱化为一个指针:
    public IntPtr UpSOHData;  如同C++的数组做为函数参数一样!
    所以:你必须指定数组的大小,即[MarshalAs(UnmanagedType.ByValArray, SizeConst = 48)],
    编译器才知道要分配具体空间大小!