I try to Marshal a unmanaged c++ dll in c#, but the marshaller fails when creating my union.
Why does this code fail?
[StructLayout(LayoutKind.Sequential)]
public struct StructWithArray
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
public int[] MySimpleArray;
//More Stuff
}
[StructLayout(LayoutKind.Explicit)]
public struct Union
{
[FieldOffset(0)]
public int Int; //Or anything else
[FieldOffset(0), MarshalAs(UnmanagedType.Struct)]
public StructWithArray MyStructWithArray;
//More Structs
}
And then constructing the Union:
Union MyUnion = new Union();
It fails if I run the code with the following Message: (Translated)
{"The Type "Union" of the Assembly [...] could not be loaded because it contained an Objectfield at Offset 0, which is not aligned correctly or got overlapped by a field which isnt a ObjectField":"Union"}
Any Suggestions?
Ps: The original code is heavily simplified to show only the Problem. There are much more Structs, and the Union is also contained by another Struct.