当前位置:编程学习 > C#/ASP.NET >>

定义个结构体,里面含有字节数组,将结构体实例化后,再实例化其中的字节数组,然后不管字节数组长度设多少,Marshal.SizeOf(结构名)始终字节数组长度为4

         [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,不知道为什么,应该怎么写。求各位高手帮忙!

--------------------编程问答-------------------- 唉,问题自己解决了!是从http://soft.chinabyte.com/database/52/11361052.shtml得到的提示。
应该加一句[MarshalAs(UnmanagedType.ByValArray, SizeConst = 48)] 在public byte[] UpSOHData;之前。
把该问题解决的方法贴出来,供大家参考。
--------------------编程问答-------------------- 原因解释:
public byte[] UpSOHData;  编译器会弱化为一个指针:
public IntPtr UpSOHData;  如同C++的数组做为函数参数一样!
所以:你必须指定数组的大小,即[MarshalAs(UnmanagedType.ByValArray, SizeConst = 48)],
编译器才知道要分配具体空间大小!
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,