我必须定义一个使用不安全代码的结构,所以我必须设置每个字段的 FieldOffset 值。但我无法定义指针的大小。这是代码:
[StructLayout(LayoutKind.Explicit)]
public struct SomeStructO
{
public SomeStructO(int theNumber)
{
TheNumber = theNumber;
Coordinates = PointF.Empty;
SomeNumbers = null;
}
[FieldOffset(0)]
public PointF Coordinates;
[FieldOffset(sizeof(float) * 2)]
public int[] SomeNumbers;
[FieldOffset(sizeof(float) * 2 + IntPtr.Size)]
public int TheNumber;
}
给出一个错误,因为 IntPtr.Size 不是一个常量表达式,当然这个也不能编译:
Marshal.SizeOf(typeof(IntPtr))
归结为问题标题,更多的是如何在 FieldOffset 定义中设置特定的“32bit 64bit compile”指针数据大小。
编辑:我也不能把“public int[] SomeNumbers;” 结构末尾的字段,因为我的结构中有 2 个不同的数组.. 像“public int [] SomeOtherNumbers;”