我有以下课程:
[StructLayout(LayoutKind.Sequential)]
class Class
{
public int Field1;
public byte Field2;
public short? Field3;
public bool Field4;
}如何从类数据(或对象头)开始获取Field4的字节偏移量?
为了说明:
Class cls = new Class();
fixed(int* ptr1 = &cls.Field1) //first field
fixed(bool* ptr2 = &cls.Field4) //requested field
{
Console.WriteLine((byte*)ptr2-(byte*)ptr1);
}在本例中,产生的偏移量为5,因为运行时实际上将Field3移动到类型的末尾(并将其填充),可能是因为它的类型是泛型的。我知道有Marshal.OffsetOf,但它返回非托管偏移量,而不是托管偏移量。
如何从FieldInfo实例检索此偏移量?是否有任何用于此的.NET方法,还是必须编写自己的方法,同时考虑到所有异常(类型大小、填充、显式偏移等)?
发布于 2015-06-19 18:49:03
使用TypedReference.MakeTypedReference的一些技巧,可以获得对字段的引用,以及对象数据的开始,然后再减去。该方法可在SharpUtils中找到。
https://stackoverflow.com/questions/30817924
复制相似问题