定义个结构体,里面含有字节数组,将结构体实例化后,再实例化其中的字节数组,然后不管字节数组长度设多少,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#