关于.net-core:因为它在-4-偏移位置处包含一个对象字段该字段已由一个非对象字段不正确地对齐或重叠

TypeLoadException: 未能从程序集“ECS.GUI.Define, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型“ECS.GUI.Define.ArmgAimPos”,因为它在 4 偏移地位处蕴含一个对象字段,该字段已由一个非对象字段不正确地对齐或重叠

异样呈现的关键字是:在4偏移地位处蕴含一个对象字段
通过查找对象,该对象为共用体


    // StructLayout使设计者能够管制类或构造的数据字段的物理布局  
    // Explicit与FieldOffset一起能够管制每个数据成员的准确地位 
    [StructLayout(LayoutKind.Explicit)]
    public struct ArmgAimPos
    {
        [FieldOffset(0)] public BayType type;
        [FieldOffset(4)] public string ContainerID;
        [FieldOffset(8)] public string JobID; 

应用FieldOffset属性实现共用体与强制类型转换

应用字段开始的构造中的偏移量初始化 FieldOffsetAttribute 类的新实例。

c# 
public FieldOffsetAttribute (int offset);

参数

offset Int32

从构造开始处到字段开始处的偏移量(以字节为单位)。

可示意的概念为:原理实际上跟C++一样,将一个int[] 型的变量指向与byte[]型变量雷同的内存区域,跟C++中将dat指向char数组的首地址是一样的。同样,这样的构造体性能与C++的共用体是一样的,即一个构造能够作为多种数据类型,而具体是什么类型视状况而定。

批改异样办法:

如提醒题目所示:4偏移地位,曾经有一个非对象字段了,所以,将偏移量向后挪动即可解决

    // StructLayout使设计者能够管制类或构造的数据字段的物理布局  
    // Explicit与FieldOffset一起能够管制每个数据成员的准确地位 
    [StructLayout(LayoutKind.Explicit)]
    public struct ArmgAimPos
    {
        [FieldOffset(0)] public BayType type;
        [FieldOffset(8)] public string ContainerID; 
        [FieldOffset(16)] public string JobID; 

[ FieldOffset(<font color=red> 8</font>)] public string ContainerID;
偏移量批改成了8 ,问题修复

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理