我正在尝试创建以下结构:
[StructLayout(LayoutKind.Explicit, Size=14)]
public struct Message
{
[FieldOffset(0)]
public ushort X;
[FieldOffset(2)]
[MarshalAs(UnmanagedType.ByValArray, SizeConst=5)]
private ushort[] Y;
[FieldOffset(12)]
public ushort Z;
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
无法从程序集中加载"消息"类型,因为它包含偏移4处的对象字段,该字段未正确对齐或由非对象字段重叠.
有谁知道为什么这会导致错误?
注意:我不能使用Pack因为我正在使用紧凑的框架.谢谢.
我对我的结构使用以下定义:
[StructLayout(LayoutKind.Explicit)]
public struct NetworkMessage
{
[FieldOffset(0)]
public MessageType Type;
[FieldOffset(4)]
public bool GatewayMessage;
//AuthenticationRequest
[FieldOffset(5)]
public char[] AuthenticationUsername; //20 charachters long
[FieldOffset(13)]
public byte[] AuthenticationPasswordHash; // 16 bytes long
//Authntication result
[FieldOffset(5)]
public bool AuthenticationSuccess;
[FieldOffset(6)]
public char[] AuthenticationMessage;
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用此类型时,我收到此错误消息:
System.TypeLoadException:无法从程序集中加载类型"NetworkMessage",因为它包含偏移量为5的对象字段,该字段未正确对齐或由非对象字段重叠.
非对象字段是指一个值是多少,一个是引用?我可以不混用这些吗?
任何帮助深表感谢.
谢谢,Venatu
编辑:道歉,我本来应该更明确,因为我打算将其作为一种伪结合.重叠是字段是有意允许我使用一个结构作为多种类型的消息,使得缓冲和传递系统更容易.对不起任何困惑