중첩되지 않은 필드가 겹쳐진 것으로보고 된 구조체가 있습니다.레이아웃 빌드를 마샬링 .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/ko-kr/library/system.runtime.interopservices.structlayoutattribute.charset.aspx에서와 같이?그렇지 않다면 구조 사이에 charsets의 이상한 교환이있을 수 있다고 생각합니다. 구조가 1 바이트 문자로만 이루어 지지만 넓은 문자로는 올바르지 않습니다. – tyranid
'LayoutKind.Explicit' 대신'LayoutKind.Sequential'을 사용할 수 있고'FieldOffset '속성? 언제나 가능한 것은 아니지만이 경우에 가능하면 전체 문제를 피할 수 있습니다. – hvd