美文网首页
偏移位置处包含一个对象字段

偏移位置处包含一个对象字段

作者: 于跃_198e | 来源:发表于2021-01-11 16:22 被阅读0次

    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 ,问题修复

    相关文章

      网友评论

          本文标题:偏移位置处包含一个对象字段

          本文链接:https://www.haomeiwen.com/subject/bnpdaktx.html