首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获得非显式场偏移量

获得非显式场偏移量
EN

Stack Overflow用户
提问于 2015-06-13 11:03:10
回答 1查看 2.9K关注 0票数 10

我有以下课程:

代码语言:javascript
复制
[StructLayout(LayoutKind.Sequential)]
class Class
{
    public int Field1;
    public byte Field2;
    public short? Field3;
    public bool Field4;
}

如何从类数据(或对象头)开始获取Field4的字节偏移量?

为了说明:

代码语言:javascript
复制
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方法,还是必须编写自己的方法,同时考虑到所有异常(类型大小、填充、显式偏移等)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-19 18:49:03

使用TypedReference.MakeTypedReference的一些技巧,可以获得对字段的引用,以及对象数据的开始,然后再减去。该方法可在SharpUtils中找到。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30817924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档