在做c++ 与 c#通信的模块 public static byte[] StructToBytes(object obj)
{
//得到结构体的大小
int size = Marshal.SizeOf(obj);
//创建byte数组
byte[] bytes = new byte[size];
//分配结构体大小的内存空间
IntPtr structPtr = Marshal.AllocHGlobal(size);
//将结构体拷到分配好的内存空间
Marshal.StructureToPtr(obj, structPtr, false);
//从内存空间拷到byte数组
Marshal.Copy(structPtr, bytes, 0, size);
//释放内存空间
Marshal.FreeHGlobal(structPtr);
//返回byte数组
return bytes;
}public class S_GM_LOOKINFO_BYUSERNAME : MessageHead
{ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
public char[] m_username; public S_GM_LOOKINFO_BYUSERNAME(string user)
{
this.m_username = user.PadRight(32, '\0').ToCharArray();
this.len = GetMessageLen();
this.cmd =(UInt32) MessageID.GM_LOOKROLEINFO_BYUSERNAME;
} public UInt32 GetMessageLen()
{
MessageHead o = new MessageHead();
return (UInt32)( Marshal.SizeOf(this) - Marshal.SizeOf(o));
}
}
当m_username为中文时 运行出错,英文正确 求帮忙
{
//得到结构体的大小
int size = Marshal.SizeOf(obj);
//创建byte数组
byte[] bytes = new byte[size];
//分配结构体大小的内存空间
IntPtr structPtr = Marshal.AllocHGlobal(size);
//将结构体拷到分配好的内存空间
Marshal.StructureToPtr(obj, structPtr, false);
//从内存空间拷到byte数组
Marshal.Copy(structPtr, bytes, 0, size);
//释放内存空间
Marshal.FreeHGlobal(structPtr);
//返回byte数组
return bytes;
}public class S_GM_LOOKINFO_BYUSERNAME : MessageHead
{ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
public char[] m_username; public S_GM_LOOKINFO_BYUSERNAME(string user)
{
this.m_username = user.PadRight(32, '\0').ToCharArray();
this.len = GetMessageLen();
this.cmd =(UInt32) MessageID.GM_LOOKROLEINFO_BYUSERNAME;
} public UInt32 GetMessageLen()
{
MessageHead o = new MessageHead();
return (UInt32)( Marshal.SizeOf(this) - Marshal.SizeOf(o));
}
}
当m_username为中文时 运行出错,英文正确 求帮忙
10年前的微软c++开发环境,默认的是ASCII编码处理字符串。
这样试试