最終更新:2019-11-18 (月) 17:10:45 (1621d)  

StructLayout
Top / StructLayout

Win32 APIやDLL関数に渡す構造体を定義する場合は、そのメンバの配置方法を変更する必要がある。これを実現するには、構造体に対してStructLayout属性を設定する。このとき、配置方法としてLayoutKind列挙体のメンバのいずれかを指定する。

C言語などの構造体と同様に、メンバが宣言された順に配置されるようにするには、LayoutKind.Sequentialという値を指定すればよい。

C言語からC♯に変換

typedef struct {
  LONG x;
  LONG y;
} POINT;

[StructLayout(LayoutKind.Sequential)]
struct POINT {
  public int x;
  public int y;
}

パラメータ (StructLayoutAttribute?)

LayoutKind

Size

  • クラスまたは構造体の絶対サイズを示します。

Pack

  • メモリ内のクラスまたは構造体のデータ フィールドのアライメントを制御します。
  • 既定では、値は0

CharSet

  • クラス内の文字列データ フィールドを既定でLPWSTRまたはLPSTRとしてマーシャリングするかどうかを示します。

関連