C# StructLayout.Auto与sequential和Explicit相比意味着什么?
我认为LayoutKind.Sequential和LayoutKind.Explicit是清楚的,但是LayoutKind.Auto是如何由C#处理的呢 问题似乎很清楚: 运行时会自动为该应用程序选择适当的布局 非托管内存中对象的成员。使用此函数定义的对象 枚举成员不能在托管代码之外公开。 尝试这样做会生成异常 换句话说,布局是动态的,这意味着您的对象不能再在托管代码之外使用。问题似乎很清楚: 运行时会自动为该应用程序选择适当的布局 非托管内存中对象的成员。使用此函数定义的对象 枚举成员不能在托管代码之外公开。 尝试这样做会生成异常 换句话说,布局是动态的,这意味着您的对象不能再在托管代码之外使用。MS说 默认情况下,公共语言运行库使用自动布局值。到 减少与自动值C#相关的布局问题, VisualBasic和C++编译器指定值的顺序布局 类型 她说 默认情况下,公共语言运行库使用自动布局值。到 减少与自动值C#相关的布局问题, VisualBasic和C++编译器指定值的顺序布局 类型C# StructLayout.Auto与sequential和Explicit相比意味着什么?,c#,pinvoke,C#,Pinvoke,我认为LayoutKind.Sequential和LayoutKind.Explicit是清楚的,但是LayoutKind.Auto是如何由C#处理的呢 问题似乎很清楚: 运行时会自动为该应用程序选择适当的布局 非托管内存中对象的成员。使用此函数定义的对象 枚举成员不能在托管代码之外公开。 尝试这样做会生成异常 换句话说,布局是动态的,这意味着您的对象不能再在托管代码之外使用。问题似乎很清楚: 运行时会自动为该应用程序选择适当的布局 非托管内存中对象的成员。使用此函数定义的对象 枚举成员不能在托
LayoutKind.Auto
的意思是,“我授予CLR权限,可以对这些字段对应的字节重新排序”。它确切地决定了如何为内存使用、打包等重新组织字段文档中没有具体说明它将进行哪些更改,可能是因为它是一个与如何编写结构无关的实现细节
如果要传递给非托管代码,这总是一件坏事,因为非托管代码希望这些字段按特定顺序排列。他们可能的重新安排注定会产生意想不到的后果。这就是为什么不能将
LayoutKind.Auto
结构公开给非托管代码的原因。LayoutKind.Auto
的意思是,“我授予CLR对这些字段对应的字节重新排序的权限”。它确切地决定了如何为内存使用、打包等重新组织字段文档中没有具体说明它将进行哪些更改,可能是因为它是一个与如何编写结构无关的实现细节
如果要传递给非托管代码,这总是一件坏事,因为非托管代码希望这些字段按特定顺序排列。他们可能的重新安排注定会产生意想不到的后果。这就是为什么你不能将
LayoutKind.Auto
结构暴露给非托管代码。你不明白的是什么?@Oded文档没有指定Auto
如何工作的内部工作机制,我认为这就是OP的目的。“我认为这个克斯托因不值得被否决。”约翰菲涅拉-这个问题被否决是因为它不清楚。OP没有说明他不懂的东西-你的猜测和任何猜测一样好。你不懂的是什么?@Oded文档没有说明Auto
的内部工作原理,我认为这就是OP的目的。“我认为这个克斯托因不值得被否决。”约翰菲涅拉-这个问题被否决是因为它不清楚。OP没有具体说明他不理解的东西-你的猜测和任何猜测一样好。