「ライブラリの基礎 - C++DLL」の版間の差分

ナビゲーションに移動 検索に移動
編集の要約なし
編集の要約なし
83行目: 83行目:
  }
  }
  </source>
  </source>
<br><br>
== StructLayout属性 ==
StructLayout属性とは、クラスまたは構造体のデータメンバを、メモリ内でどのように配置するかを表す。<br>
<source lang="csharp">
[ StructLayout( LayoutKind列挙 ) ]
</source>
<br>
下表に、LayoutKind列挙子を示す。<br>
<center>
{| class="wikitable"
|-
! LayoutKind列挙子 !! 説明
|-
| Sequential || 宣言される順番に従って並べる。
|-
| Explicit || <code>FieldOffsetAttribute</code>で独自のオフセットを指定して並べる。
|-
| Auto || 適切なレイアウトで並べる。<br>(これを指定すると、マネージドコード外からアクセスできない)
|}
</center>
<br>
下表に、StructLayout属性のパラメータを示す。<br>
<center>
{| class="wikitable"
|-
! StructLayout属性のパラメータ !! 説明 !! 既定値
|-
| Pack || パックサイズを指定するint値である。<br>指定可能な値は、1、2、4、8、16のいずれかである。 || 8
|-
| CharSet || 文字列のマーシャリング方法を示すCharSet列挙である。 || CharSet.Auto
|-
| Size || 構造体またはクラスのサイズを指定する。 ||
|}
</center>
<br>
<source lang="csharp">
[StructLayout( LayoutKind.Sequential )]
public struct Position
{
    public double x;
    public double y;
    public double z;
}
</source>
<br><br>
== CLSCompliant属性 ==
CLSCompliant属性は、CLSへの準拠を検証するかどうかをコンパイラに指示する。<br>
<br>
外部から参照できない型やメンバに対しては、この属性を指定する必要は無い。<br>
指定する場合、<code>このアセンブリの外から認識できないため、CLS準拠の確認は '型' で実行されません</code>と警告が表示される。<br>
<source lang="csharp">
[CLSCompliant( false )]
public int SetValue( UInt32 value );
</source>
<br>
<u>※注意</u><br>
<u>上記の例では、UInt32型はCLSに準拠しないため、<code>CLSCompliant(false)</code>と指定する必要がある。</u><br>
<br><br>
<br><br>


案内メニュー