私はこのような構造体を持っています:
struct test
{
[MarshalAs(UnmanagedType.ByValArray)]
public byte[] a;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 200)]
public string b;
}
メンバーのサイズは動的です。つまり、 in属性
a
を書き込むことはできません。そして、ここに問題があります:
私はそれを次のように変換しようとすると:SizeConst
MarshalAs
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);
はsize
201 で、正しいサイズは 212 であるため、結果byte[]
は間違っています。 の最初の要素しかありませんt.a
。
次に、次のようにサイズを正しくしようとしました。
int size = Marshal.SizeOf(t);
size += t.a.Length - 1;
しかし、それでも正しく、size
結果byte[]
はまだ間違っています。どうすれば結果を正しくすることができますか?