私はこの構造体とこのコードを持っています:
[StructLayout(LayoutKind.Sequential, Pack = 8)]
private class xvid_image_t
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
public int[] stride;
// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
// public IntPtr[] plane;
}
public int decore()
{
xvid_image_t myStruct = new xvid_image_t();
myStruct.stride = new int[4]; // can be commented out - same result
GCHandle.Alloc(myStruct, GCHandleType.Pinned);
// ...
}
実行しようとすると、次のようにArgumentException
言います。
オブジェクトに非プリミティブまたは非 blittable データが含まれている
このMSDNページを読んだ後、
次の複合型も blittable 型です。
整数の配列など、blittable 型の 1 次元配列。ただし、blittable 型の可変配列を含む型自体は blittable ではありません。
blittable 型 (およびフォーマットされた型としてマーシャリングされている場合はクラス) のみを含む、フォーマットされた値の型。フォーマットされた値の型の詳細については、「値の型の既定のマーシャリング」を参照してください。
私が間違っていることを理解していません。を使いたいだけMarshal
でなく、これも理解したい。
だから私が実際に知りたいのは:
- なんで?
- どうすればこれを解決できますか?
- あなたが提供するソリューションは、構造体のコメント行でも機能しますか?
.Net 4.5 を使用していますが、.Net 2.0 のソリューションも必要です。