この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

LayoutKind 列挙型

 

公開日: 2016年10月

アンマネージ コードにエクスポートするときにオブジェクトのレイアウトを制御します。

名前空間:   System.Runtime.InteropServices
アセンブリ:  mscorlib (mscorlib.dll 内)

[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum LayoutKind

メンバー名説明
Auto

ランタイムは、アンマネージ メモリ内のオブジェクトのメンバーを自動的に適切なレイアウトを選択します。 この列挙体メンバーに定義されているオブジェクトは、マネージ コードの外部で公開することはできません。 これを行うにしようとすると、例外が生成されます。

Explicit

アンマネージ メモリ内のオブジェクトの各メンバーの正確な位置は明示的に詳細に制御の設定、StructLayoutAttribute.Packフィールドです。 各メンバーを使用する必要があります、FieldOffsetAttribute型の中でそのフィールドの位置を示すためにします。

Sequential

オブジェクトのメンバーをアンマネージ メモリにエクスポートするときに表示される順序で順番に配置されます。 メンバーがで指定したパッキングに従ってレイアウトStructLayoutAttribute.Pack、連続していないことができます。

この列挙体を併用StructLayoutAttributeです。 共通言語ランタイムを使用して、Auto既定のレイアウトの値。 関連するレイアウト関連の問題を軽減する、Auto値、c#、Visual Basic、および C++ コンパイラを指定Sequentialのレイアウトを値の型。

System_CAPS_important重要

StructLayoutAttribute.Packフィールドがデータ フィールドの配置を制御し、したがってに関係なく、レイアウトに影響、LayoutKind値を指定します。 既定では、値Packが 0 で、既定のパッキング サイズは、現在のプラットフォームのことを示します。 たとえば、使用、Explicitレイアウトの値し、フィールドのアラインメントを指定バイト境界に設定する必要がありますPack目的の結果を取得するには 1 です。

次の例のマネージ宣言を示しています、PtInRectポイントは四角形内にあるしを定義するかどうかをチェックする関数、Point構造体SequentialレイアウトとRect構造体Explicitレイアウトです。

enum Bool
{
   False = 0,
   True
};
[StructLayout(LayoutKind.Sequential)]
public struct Point 
{
   public int x;
   public int y;
}   

[StructLayout(LayoutKind.Explicit)]
public struct Rect 
{
   [FieldOffset(0)] public int left;
   [FieldOffset(4)] public int top;
   [FieldOffset(8)] public int right;
   [FieldOffset(12)] public int bottom;
}   

class LibWrapper
{
   [DllImport("user32.dll", CallingConvention=CallingConvention.StdCall)]
   public static extern Bool PtInRect(ref Rect r, Point p);
};

class TestApplication
{
   public static void Main()
   {
      try
      {
         Bool bPointInRect = 0;
         Rect myRect = new Rect();
         myRect.left = 10;
         myRect.right = 100;
         myRect.top = 10;
         myRect.bottom = 100;
         Point myPoint = new Point();
         myPoint.x = 50;
         myPoint.y = 50;
         bPointInRect = LibWrapper.PtInRect(ref myRect, myPoint);
         if(bPointInRect == Bool.True)
            Console.WriteLine("Point lies within the Rect");
         else
            Console.WriteLine("Point did not lie within the Rect");
      }
      catch(Exception e)
      {
         Console.WriteLine("Exception : " + e.Message);
      }
   }
}

ユニバーサル Windows プラットフォーム
8 以降で使用可能
.NET Framework
1.1 以降で使用可能
ポータブル クラス ライブラリ
サポート対象: 移植可能 .NET プラットフォーム
Silverlight
2.0 以降で使用可能
Windows Phone Silverlight
7.0 以降で使用可能
Windows Phone
8.1 以降で使用可能
トップに戻る
表示: