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

  • 相关阅读:
    AS3.0函数定义的方法
    AS3.0的int uint Number的使用原则
    AS3的数据类型和定义
    把AS代码链接到fla文件
    试题
    【転載】LOOP
    【購買管理】注文請書とは? 注文書との違いと書き方、収入印紙の必要性
    共通系
    【转载】SAP ABAP开发技术总结]数据引用(data references)、对象引用(object references)
    CALL FUNCTION
  • 原文地址:https://www.cnblogs.com/yuyue5945/p/14262827.html
Copyright © 2020-2023  润新知