Hallo !
Ich möchte zur Laufzeit den Speicherplatzbedarf von etwas größeren struct -Typen bestimmen.
Bei einfachen Strukturen wie:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| public struct Data { public int int1; public int int2; public int int3;
} |
hat es einfach mit:
C#-Quelltext
1:
| int size = Marshal.SizeOf(typeof(Data)); |
funktioniert. Leider bekomme ich keine vernünfigen Werte mehr, wenn ich ein Array einbette.
Also etwa so:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| [StructLayout(LayoutKind.Sequential, Pack = 4, Size=20)] public struct Data { public int int1; public int int2; [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.SysInt, SizeConst = 12)] public int[] int3; public Data(int arrSize) { int1 = 0; int2 = 0; int3 = new int[arrSize]; } }
... Data data= new Data(3); int size = Marshal.SizeOf(data); |
SizeOf liefert einen Wert von 56 aber ich hätte 20 erwartet. Weiß jemand Rat ?
Grüße
Oliver
PS: [StructLayout(LayoutKind.Explicit, Pack = 1)] habe ich auch schon ausprobiert, leider ohne Erfolg.