首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检索结构的[StructLayout]属性

检索结构的[StructLayout]属性
EN

Stack Overflow用户
提问于 2013-07-17 02:50:35
回答 1查看 1.2K关注 0票数 2

我想从应用于以下结构的StructLayout中获取22字节的结构大小。

代码语言:javascript
复制
[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Ansi, Pack = 1, Size = 22)]
internal unsafe struct Entry
{
    [FieldOffset(0)]
    private fixed char title[14];
    [FieldOffset(14)]
    private readonly int size;
    [FieldOffset(18)]
    private readonly int start;
}

有人会建议Marshal.SizeOf,但它返回的非托管对象的大小为28字节,这是不希望的。

代码语言:javascript
复制
int count = Marshal.SizeOf(typeof(Entry));

但是,获取此属性似乎是不可能的,因为数组'customAttributes‘的长度始终为0。

代码语言:javascript
复制
var type = typeof(Entry);
var customAttributes = type.GetCustomAttributes(typeof(StructLayoutAttribute), true);

有什么解决方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-17 02:56:35

StructLayout属性中的信息作为IL指令嵌入到方法中,而不是作为自定义属性。要检索它,可以使用Type.StructLayoutAttribute Property

代码语言:javascript
复制
var type = typeof(Entry);
var sla = type.StructLayoutAttribute;

或者,如果结构在您的控制之下,您可以简单地定义一个大小常量:

代码语言:javascript
复制
[StructLayout(LayoutKind.Explicit, Pack = 1, Size = Entry.Size)]
internal unsafe struct Entry
{
    public const int Size = 22;
    ...
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17684664

复制
相关文章

相似问题

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