[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,不知道为什么,应该怎么写。求各位高手帮忙!
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,不知道为什么,应该怎么写。求各位高手帮忙!
解决方案 »
- 用户 'sa' 登录失败。原因: 未与信任 SQL Server 连接相关联
- 怎么用C#代码实现WPF中的控件拖动与拉伸
- c#中的问题
- DataGridView 中DataGridViewComboBoxColumn的默认值
- 怎样在cs文件里面调用aspx中写好js (button是在datalist里面的!)搞了一上午了 头都大了阿。。。
- c#中打印预览问题,如何使用excel模版文件来进行打印预览?
- 哪些资源是托管的 哪些是非托管的??
- 如何实现DATAGRID添加一条空记录
- 如何用C#编写一段可自动执行程序,急
- 请求朋友帮助
- 关于方框内打勾这个符号如何写入到pdf文件中
- 高分求教:一.net系统的Excel导入功能的实现 求教
应该加一句[MarshalAs(UnmanagedType.ByValArray, SizeConst = 48)] 在public byte[] UpSOHData;之前。
把该问题解决的方法贴出来,供大家参考。
public byte[] UpSOHData; 编译器会弱化为一个指针:
public IntPtr UpSOHData; 如同C++的数组做为函数参数一样!
所以:你必须指定数组的大小,即[MarshalAs(UnmanagedType.ByValArray, SizeConst = 48)],
编译器才知道要分配具体空间大小!