首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

未能封送类型,因为嵌入数组实例的长度与布局中声明的长度不匹配,该怎么解决

2012-04-26 
未能封送类型,因为嵌入数组实例的长度与布局中声明的长度不匹配public struct stSendrd{public int Common

未能封送类型,因为嵌入数组实例的长度与布局中声明的长度不匹配
public struct stSendrd
  {
   
  public int Common ;
  //命令行参数,对应相应执行动作的数字
  [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
  public char[] strParam ;
   
   

   
  bool boolParam ;
  }
public byte[] Struct2Bytes(object obj)
  {
  int size = Marshal.SizeOf(obj);
  byte[] bytes = new byte[size];
   
  IntPtr ptr = Marshal.AllocHGlobal(size);
  Marshal.StructureToPtr(obj, ptr, false);
  Marshal.Copy(ptr, bytes, 0, size);
  Marshal.FreeHGlobal(ptr);
  return bytes;
   
   

   
  } 
Sendrd.Common=1
Sendrd.strParam ="test".ToCharArray();
udp.SendMessage(Struct2Bytes(Sendrd));


异常详细信息: System.ArgumentException: 未能封送类型,因为嵌入数组实例的长度与布局中声明的长度不匹配。

源错误:

行 117:  
行 118: IntPtr ptr = Marshal.AllocHGlobal(size);
行 119: Marshal.StructureToPtr(obj, ptr, false);//这里出错
行 120: Marshal.Copy(ptr, bytes, 0, size);
行 121: Marshal.FreeHGlobal(ptr);

请高手帮忙解决啊,谢谢!!

[解决办法]
Sendrd.strParam = "test".PadRight(20, '\0').ToCharArray();

热点排行