我正在忙于从C#调用DLL,并且遇到了需要定义我自己的结构的问题。许多文章都强制使用结构的顺序布局
[StructLayout(LayoutKind.Sequential)]
struct Foo ...所以,我遵循了suite,我的程序起作用了。现在,当我把线取出来的时候,它仍然有效。为什么我需要它?
发布于 2008-12-26 16:41:46
托管结构的内部布局未记录且无法发现。故意隐藏实现细节,如成员顺序和打包。通过StructLayout属性,您可以强制P/Invoke编组程序强制实施特定的布局和打包。
默认设置恰好与让代码正常工作所需的内容相匹配,这只是一个意外。尽管这并不少见。请注意Type.StructLayoutAttribute属性。
发布于 2010-03-17 12:43:21
有趣的一点。我确信我有失败的代码,直到我放入一个显式的LayoutKind.Sequential,然而我已经确认即使在1.1中,顺序仍然是默认的结构。
请注意,VB Reference for Structure在备注>行为>内存消耗中暗示您确实需要指定StructLayout来确认内存布局,但是StructLayoutAttribute的文档指出顺序是微软编译器中结构的默认设置。
发布于 2008-12-27 12:02:58
我不完全确定,但它可能会影响二进制序列化-它可能会按顺序输出字段,而不是命名或排序信息(导致较小的文件),但这完全是一时兴起。
https://stackoverflow.com/questions/393943
复制相似问题