gpt4 book ai didi

c# - 结构中对齐不正确/非对象字段

转载 作者:太空狗 更新时间:2023-10-30 00:21:10 25 4
gpt4 key购买 nike

我正在为我的结构使用以下定义:

[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 处包含一个对象字段,该字段未正确对齐或与非对象字段重叠。

非对象字段是指一个是值,一个是引用?我不能混合这些吗?

非常感谢任何帮助。

谢谢,维纳图

编辑:抱歉,我应该更明确地说我打算将其作为一种伪联盟。重叠字段是为了允许我将一个结构用作多种类型的消息,从而使缓冲和在系统中传递更容易。抱歉造成任何混淆

最佳答案

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

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

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

另见 Incorrectly aligned or overlapped by a non-object field error

关于c# - 结构中对齐不正确/非对象字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6891867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com