我有一个结构,它有一个非重叠字段报告为重叠。编组LayoutKind.Explicit结构与重叠失败发布版本
[FieldOffset(8)]
Int32 X;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
[FieldOffset(12)]
string Y;
[FieldOffset(28)]
int Z;
报告的错误是:
未能加载类型“XXX” ...它包含的物场在偏移12被不正确地对准或由非对象场重叠。
它仅在发布配置(TRACE,DEBUG标志和不安全的代码被启用,优化被关闭)时发生,猜测 - 它会发生什么?
UPD:感谢@svick。确认x64构建不是人们想要的编组。
你是否在StructLayout属性中指定了字符集?正如在http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.structlayoutattribute.charset.aspx?如果不是这样,我认为在构建之间可能会出现一些奇怪的字符集切换,因为该结构对于单字节字符而不是宽字符是正确的 – tyranid
您可以使用'LayoutKind.Sequential'而不是'LayoutKind.Explicit',并删除'FieldOffset '属性?这并不总是可能的,但如果在这种情况下可能的话,它可能会避免整个问题。 – hvd