结构体中不正确对齐/非对象字段

本文关键字:对象 字段 对齐 不正确 结构体 | 更新日期: 2023-09-27 18:04:19

我使用的结构体定义如下:

[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;
}

然而,当我尝试使用这个类型时,我得到这个错误消息:

系统。typeeloadeexception:无法从程序集中加载类型'NetworkMessage',因为它包含偏移量为5的对象字段,该对象字段不正确对齐或与非对象字段重叠。

非对象字段是否意味着一个是值,一个是引用?我能不把这些混在一起吗?

任何帮助都非常感谢。

谢谢,Venatu

编辑:抱歉,我应该更明确地说,我打算把这作为一种伪联合。字段的重叠是故意的,允许我使用一个结构体作为多种类型的消息,使缓冲和在系统中传递更容易。抱歉给大家造成了混淆

结构体中不正确对齐/非对象字段

数组必须从4字节的边界开始

有关在显式结构中使用数组的更多信息,请参阅本文。它还提到了数组的偶数边界问题,并描述了显式结构中数组的一些替代选项。

http://www.developerfusion.com/article/84519/mastering-structs-in-c/

参见被非对象字段错误错误对齐或重叠