1

我有一个这样的结构:

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

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

并且成员a大小是动态的,这意味着我无法编写SizeConstinMarshalAs属性。 这就是问题所在: 当我尝试将其转换为byte[]这样的:

    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);

是201,正确的size大小是212,所以结果byte[]是错误的。它只有第一个元素t.a

然后我试着像这样使尺寸正确:

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

但是即使size是对的,结果byte[]仍然是错误的,我怎样才能使结果正确?

4

0 回答 0