未能封送类型,因为嵌入数组实例的长度与布局中声明的长度不匹配
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();