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);请高手帮忙解决啊,谢谢!!
{
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);请高手帮忙解决啊,谢谢!!
解决方案 »
- winform程序使用sqlite数据库,datagridview导出文本文件空白
- 求c#点对点p2p的源码程序
- 禁止为TextBox的text属性 赋值
- 关于俩个form之间的调用
- 算法 (C# 时间差)
- 求DATAGRIDVIEW查询数据的最优解决办法?
- 利用api得到某应用程序中一个文本框的句柄,有什么方法让这个文本框失去焦点?
- 日期问题
- c#如何截取带汉字的部分和数字部分
- WPF中执行存储的结果是5个Table,每个Table一列,现在想把5个table分别绑定到5个Combox中,Binding怎么写怎样比较灵活
- try-catch-finally语句不会用啊~~~求指教~~~
- windows下有什么可以用cmd调用的多线程下载工具啊?类似于wget那样的
这里size只能是20,不能随obj的大小而变。
但Sendrd.strParam ="test".ToCharArray();会随时变化,要怎么解决呢?谢谢