我有一個結構,它有一個非重疊字段報告爲重疊。編組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