zoukankan      html  css  js  c++  java
  • TypeLoadException: 未能从程序集“ECS.GUI.Define, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型“ECS.GUI.Define.ArmgAimPos”,因为它在 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( 8)] public string ContainerID;
    偏移量修改成了8 ,问题修复

  • 相关阅读:
    react typescript 子组件调用父组件
    Mongodb query查询
    CentOS虚拟机不能联网状况下yum方式从本地安装软件包(转载的)
    CentOS6.5 mini开启网络
    MySQL的InnoDB表如何设计主键索引-转自淘宝MySQL经典案例
    linux下安装mysql-community后起不来
    Eclipse 快捷键
    maven下载jta失败,自己本地安装jta库
    spring配置文件中id与name
    @autowired和@resource的区别
  • 原文地址:https://www.cnblogs.com/yuyue5945/p/14262827.html
Copyright © 2011-2022 走看看