Click here to Skip to main content
15,884,537 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
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)]

C#
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;
                 //


       }
Posted

1 solution

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:

C#
       //... 
        [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;
        //
}
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
Top Experts
Last 24hrsThis month


CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900