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

  • 相关阅读:
    What is tail-recursion
    Lua(1)
    递归与循环
    android屏幕适配
    Handler 与 Toast
    Android ViewGroup onInterceptTouchEvent
    Java Synchronized 与 ThreadLocal 异同
    Java Synchronized 遇上 静态/实例方法 、静态/实例变量
    Java Concurrent happens-before
    CM记录-JVM调优
  • 原文地址:https://www.cnblogs.com/yuyue5945/p/14262827.html
Copyright © 2011-2022 走看看