1

私はこのような構造体を持っています:

    struct test
    {
        [MarshalAs(UnmanagedType.ByValArray)]
        public byte[] a;

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 200)]
        public string b;
    }

メンバーのサイズは動的です。つまり、 in属性 aを書き込むことはできません。そして、ここに問題があります: 私はそれを次のように変換しようとすると:SizeConstMarshalAsbyte[]

    int size = Marshal.SizeOf(t);

    byte[] bs = new byte[size];

    IntPtr pt = Marshal.AllocHGlobal(size);
    Marshal.StructureToPtr(t, pt, false);
    Marshal.Copy(pt, bs, 0, size);
    Marshal.FreeHGlobal(pt);

size201 で、正しいサイズは 212 であるため、結果byte[]は間違っています。 の最初の要素しかありませんt.a

次に、次のようにサイズを正しくしようとしました。

 int size = Marshal.SizeOf(t);
 size += t.a.Length - 1;

しかし、それでも正しく、size結果byte[]はまだ間違っています。どうすれば結果を正しくすることができますか?

4

0 に答える 0