を構築するリリースに失敗しました。マーシャリングLayoutKind.Explicit構造体は、私が重なっとして<em>、非重複</em>フィールドが報告した構造体を持っている
[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のように?そうでない場合は、構造体が1バイト文字ではあるがワイド文字では正しくないので、ビルド間の文字セットの変な切り替えがあると思われます。 – tyranid
'LayoutKind.Explicit'の代わりに' LayoutKind.Sequential'を使用できますか? 'FieldOffset '属性?それは常に可能ではありませんが、この場合は可能ですが、問題全体を回避することができます。 – hvd