我对我的结构使用以下定义:
[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;
}
但是,当我尝试使用此类型时,收到此错误消息:
System.TypeLoadException:无法从程序集中加载类型“NetworkMessage”,因为它包含偏移量为5的对象字段,该字段未正确对齐或由非对象字段重叠。
非对象字段是指一个是值,一个是引用?我可以不混用这些吗?
非常感谢任何帮助。
谢谢, Venatu
编辑:道歉,我应该更加明确,因为我打算将其作为一种伪结合。重叠是字段是有意允许我使用一个结构作为多种类型的消息,使得缓冲和传递系统更容易。对不起任何混淆答案 0 :(得分:10)
数组必须以4字节边界开始。
有关在显式结构中使用数组的更多信息,请参阅此文章。它还提到了数组的偶数边界问题,并描述了显式结构中数组的一些替代选项。
http://www.developerfusion.com/article/84519/mastering-structs-in-c/
另见Incorrectly aligned or overlapped by a non-object field error