错误:无法加载类型'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.
本文介绍了错误:无法加载类型'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 fielddelta_limit
(from offeset 147) of typefloat
so its size is4 bytes
and now it is overlapping your fieldcontrolname4QC
that now has offset148
.
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屋!
查看全文