2

安全でないコードで動作する構造体を定義する必要があるため、すべてのフィールドの 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;」のように

4

2 に答える 2