安全でないコードで動作する構造体を定義する必要があるため、すべてのフィールドの 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定義で特定の「32ビット64ビットコンパイル」ポインターデータサイズを設定する方法がより多くなります。
編集:また、「public int [] SomeNumbers;」を入れることはできません 構造体に2つの異なる配列があるため、構造体の最後にあるフィールド..「public int [] SomeOtherNumbers;」のように