相关疑难解决方法(0)

非对象字段错误错误地对齐或重叠

我正在尝试创建以下结构:

    [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因为我正在使用紧凑的框架.谢谢.

c# compact-framework structure explicit alignment

13
推荐指数
1
解决办法
1万
查看次数

struct中的错误对齐/非对象字段

我对我的结构使用以下定义:

[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

编辑:道歉,我本来应该更明确,因为我打算将其作为一种伪结合.重叠是字段是有意允许我使用一个结构作为多种类型的消息,使得缓冲和传递系统更容易.对不起任何困惑

.net c# union struct

4
推荐指数
1
解决办法
4108
查看次数

标签 统计

c# ×2

.net ×1

alignment ×1

compact-framework ×1

explicit ×1

struct ×1

structure ×1

union ×1