错误:无法加载类型'test',因为它包含偏移148处的对象字段,该字段未正确对齐或由非对象字段重叠。 [英] Error: Could not load type 'test' because it contains an object field at offset 148 that is incorrectly aligned or overlapped by a non-object field.

查看:99
本文介绍了错误:无法加载类型'test',因为它包含偏移148处的对象字段,该字段未正确对齐或由非对象字段重叠。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗨...



当我写这段代码时,我收到一条错误,无法从assembly'structuretest加载类型'test',版本= 1.0.0.0 ,Culture = neutral,PublicKeyToken = null'因为它包含偏移148处的对象字段,该字段被非对象字段错误地对齐或重叠。它如何解决?

[StructLayout(LayoutKind.Explicit) )]

// [StructLayout(LayayKind.Sequential)]



Hi...

When i write this code i got an error that Could not load type 'test' from assembly 'structuretest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because it contains an object field at offset 148 that is incorrectly aligned or overlapped by a non-object field.How it solve??
[StructLayout(LayoutKind.Explicit)]
//[StructLayout(LayoutKind.Sequential)]

public struct test
       {

         [FieldOffset(0)]
         
             [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
             public byte[] itemname;

          // char[] version = new char[4];
           /*1 byte*/
          // public byte ii;
          // public  byte[] itemname;
           ////20
          [FieldOffset(21)]
          public  byte method;/*1*/
          [FieldOffset(22)]
          public byte wavelen_1;/*1*/
          [FieldOffset(23)]
          public byte wavelen_2;/*1*/
          [FieldOffset(24)]
          public byte units;/*1*/
          [FieldOffset(25)]
          public byte temp;/*1*/
           [FieldOffset(26)]
          public ushort regvol_1;
           [FieldOffset(27)]
           public ushort regvol_2;
           [FieldOffset(28)]
           public ushort samp_vol;
           [FieldOffset(29)]
           public ushort asp_vol;
           [FieldOffset(30)]
           public ushort linear_limit;
           [FieldOffset(31)]
           public ushort normal_low;
           [FieldOffset(32)]
           public ushort normal_high;
           [FieldOffset(33)]
          public byte slope_reaction;
          [FieldOffset(34)]
           public ushort abs_limit;
          [FieldOffset(32)]
          public float abs_high;
          [FieldOffset(36)]
          public float abs_low;
          [FieldOffset(40)]
          public  byte blank;
          [FieldOffset(41)]
          public byte slope_units;//mar 3
          [FieldOffset(42)]
          public byte num_stds;
          [FieldOffset(43)]
          public float factor;//90 bytes
          [FieldOffset(47)]
          public float std_abs0;
          [FieldOffset(51)]
          public float std_abs1;
          [FieldOffset(55)]
          public float std_abs2;
          [FieldOffset(59)]
          public float std_abs3;
          [FieldOffset(63)]
          public float std_abs4;
          [FieldOffset(67)]
          public float std_abs5;
          [FieldOffset(71)]
          public float std_abs6;
          [FieldOffset(75)]
          public float std_abs7;
          [FieldOffset(79)]
          public  float std_abs8;
          [FieldOffset(83)]
          public float std_conc0;
          [FieldOffset(87)]
          public float std_conc1;
          [FieldOffset(91)]
          public float std_conc2;
          [FieldOffset(95)]
          public float std_conc3;
          [FieldOffset(99)]
          public float std_conc4;
          [FieldOffset(103)]
          public float std_conc5;
          [FieldOffset(107)]
          public float std_conc6;
          [FieldOffset(111)]
          public float std_conc7;
          [FieldOffset(115)]
          public float std_conc8;
          [FieldOffset(119)]
          public byte incub_time;
          [FieldOffset(120)]
          public byte num_read;
          [FieldOffset(121)]
          public ushort delta;
          [FieldOffset(122)]
          public byte decimals;
          [FieldOffset(123)]
          public byte std_repeat;
          [FieldOffset(124)]
          public byte sample_repeat;
          [FieldOffset(125)]
          public ushort delay;//100bytes
          [FieldOffset(126)]
          public byte dmax;
          [FieldOffset(127)]
          public float dmax_limit;
          [FieldOffset(131)]
          public float saved_reagentblank;
          [FieldOffset(135)]
          public float std_concentration;
          [FieldOffset(139)]
          public float intercept;
          [FieldOffset(143)]
          public float slope;
          [FieldOffset(147)]
          public float delta_limit;//161 bytes
        // [FieldOffset(151)]
         [FieldOffset(148)]

         [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
         public byte[] controlname4QC;
          [FieldOffset(168)]
         [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
         public byte[] reserved;
                 //


       }

推荐答案

1.字段 delta_limit (来自offeset 147)类型 float 所以它的大小是 4个字节现在它与你的字段重叠 controlname4QC 现在有偏移 148



2.你必须在结构的最后部分进行接下来的2次修改:



1.The field delta_limit (from offeset 147) of type float so its size is 4 bytes and now it is overlapping your field controlname4QC that now has offset 148.

2.You have to do the next 2 changes in your last part of your struct:

       //... 
        [FieldOffset(147)] // ==> 147+4 = 151
        public float delta_limit;
        [FieldOffset(151)]  //Here is the first change! 
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)] //==> 151 +20 = 171!
        public byte[] controlname4QC;
        [FieldOffset(171)] // Here is the 2nd change!
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
        public byte[] reserved;
        //
}


这篇关于错误:无法加载类型'test',因为它包含偏移148处的对象字段,该字段未正确对齐或由非对象字段重叠。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆