19

次の構造を作成しようとしています。

    [StructLayout(LayoutKind.Explicit, Size=14)]
    public struct Message
    {
        [FieldOffset(0)]
        public ushort X;
        [FieldOffset(2)]
        [MarshalAs(UnmanagedType.ByValArray, SizeConst=5)]
        private ushort[] Y;
        [FieldOffset(12)]
        public ushort Z;
    }

次のエラーが発生します。

タイプ「メッセージ」をアセンブリからロードできませんでした。これは、オフセット4にオブジェクトフィールドが含まれているため、オブジェクトフィールドが正しく配置されていないか、非オブジェクトフィールドとオーバーラップしています。

なぜこれがエラーを引き起こしているのか誰かが知っていますか?

注:コンパクトフレームワークを使用しているため、Packを使用できません。ありがとう。

4

2 に答える 2

4

配列が「X」と重なっているために問題が発生しています。C# の ulong は UInt64 (C++ の ulong は UInt32) なので、実際には 8 バイトです。

2 番目の FieldOffset を 8 に変更するか、X を uint に変更すると、これはなくなります。

于 2009-07-27T19:24:56.797 に答える