首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么时候应该显式指定StructLayout?

什么时候应该显式指定StructLayout?
EN

Stack Overflow用户
提问于 2008-12-26 16:25:01
回答 3查看 3.9K关注 0票数 6

我正在忙于从C#调用DLL,并且遇到了需要定义我自己的结构的问题。许多文章都强制使用结构的顺序布局

代码语言:javascript
复制
[StructLayout(LayoutKind.Sequential)]
struct Foo ...

所以,我遵循了suite,我的程序起作用了。现在,当我把线取出来的时候,它仍然有效。为什么我需要它?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-12-26 16:41:46

托管结构的内部布局未记录且无法发现。故意隐藏实现细节,如成员顺序和打包。通过StructLayout属性,您可以强制P/Invoke编组程序强制实施特定的布局和打包。

默认设置恰好与让代码正常工作所需的内容相匹配,这只是一个意外。尽管这并不少见。请注意Type.StructLayoutAttribute属性。

票数 5
EN

Stack Overflow用户

发布于 2010-03-17 12:43:21

有趣的一点。我确信我有失败的代码,直到我放入一个显式的LayoutKind.Sequential,然而我已经确认即使在1.1中,顺序仍然是默认的结构。

请注意,VB Reference for Structure在备注>行为>内存消耗中暗示您确实需要指定StructLayout来确认内存布局,但是StructLayoutAttribute的文档指出顺序是微软编译器中结构的默认设置。

票数 1
EN

Stack Overflow用户

发布于 2008-12-27 12:02:58

我不完全确定,但它可能会影响二进制序列化-它可能会按顺序输出字段,而不是命名或排序信息(导致较小的文件),但这完全是一时兴起。

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

https://stackoverflow.com/questions/393943

复制
相关文章

相似问题

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