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

StructLayoutAttribute クラス

 

公開日: 2016年10月

メモリ内のクラスまたは構造体のデータ フィールドの物理的なレイアウトを制御できます。

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

System.Object
  System.Attribute
    System.Runtime.InteropServices.StructLayoutAttribute

[AttributeUsageAttribute(AttributeTargets.Class | AttributeTargets.Struct, 
	Inherited = false)]
[ComVisibleAttribute(true)]
public sealed class StructLayoutAttribute : Attribute

名前説明
System_CAPS_pubmethodStructLayoutAttribute(Int16)

指定した System.Runtime.InteropServices.LayoutKind 列挙体メンバーを使用して、StructLayoutAttribute クラスの新しいインスタンスを初期化します。

System_CAPS_pubmethodStructLayoutAttribute(LayoutKind)

指定した System.Runtime.InteropServices.LayoutKind 列挙体メンバーを使用して、StructLayoutAttribute クラスの新しいインスタンスを初期化します。

名前説明
System_CAPS_pubpropertyTypeId

派生クラスで実装されると、この Attribute の一意の識別子を取得します。(Attribute から継承されます。)

System_CAPS_pubpropertyValue

クラスまたは構造体を整列する方法を指定する LayoutKind 値を取得します。

名前説明
System_CAPS_pubmethodEquals(Object)

この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 このインスタンスが、指定されたオブジェクトと等価であるかどうかを示す値を返します。(Attribute から継承されます。)

System_CAPS_pubmethodGetHashCode()

このインスタンスのハッシュ コードを返します。(Attribute から継承されます。)

System_CAPS_pubmethodGetType()

現在のインスタンスの Type を取得します。(Object から継承されます。)

System_CAPS_pubmethodIsDefaultAttribute()

派生クラスでオーバーライドされるとき、このインスタンスの値が派生クラスの既定値であるかどうかを示します。(Attribute から継承されます。)

System_CAPS_pubmethodMatch(Object)

派生クラスでオーバーライドされると、指定したオブジェクトをこのインスタンスが等しいかどうかを示す値を返します。(Attribute から継承されます。)

System_CAPS_pubmethodToString()

現在のオブジェクトを表す文字列を返します。(Object から継承されます。)

名前説明
System_CAPS_pubfieldCharSet

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

System_CAPS_pubfieldPack

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

System_CAPS_pubfieldSize

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

名前説明
System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

一連の名前を対応する一連のディスパッチ識別子に割り当てます。(Attribute から継承されます。)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

オブジェクトの型情報を取得します。この情報はインターフェイスの型情報の取得に使用できます。(Attribute から継承されます。)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetTypeInfoCount(UInt32)

オブジェクトが提供する型情報インターフェイスの数 (0 または 1) を取得します。(Attribute から継承されます。)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

オブジェクトによって公開されたプロパティおよびメソッドへのアクセスを提供します。(Attribute から継承されます。)

この属性は、クラスまたは構造体に適用できます。

共通言語ランタイムは、クラスまたは構造体マネージ メモリのデータ フィールドの物理的なレイアウトを制御します。 ただし、アンマネージ コードに、型を渡す場合を使えば、 StructLayoutAttribute アンマネージ型のレイアウトを制御する属性です。 指定された属性で LayoutKind.Sequential メンバーの順序で連続して配置します。 LayoutKind.Sequential 両方のマネージ メモリにレイアウトとアンマネージ メモリ内のレイアウトを制御します。 非 blittable 型のクラスまたは構造体には、アンマネージ コードにマーシャ リングが、マネージ メモリにレイアウトを制御せずレイアウトを制御します。 指定された属性で LayoutKind.Explicit を各データ メンバーの正確な位置を制御します。 Blittable 型と非 blittable 型の両方の種類のマネージ コードとアンマネージの両方のレイアウトに影響します。 使用して LayoutKind.Explicit を使用する、 FieldOffsetAttribute 型内の各フィールドの位置を示す属性です。

C#、Visual Basic および C++ コンパイラの適用、 Sequential 既定では構造体へのレイアウトの値。 クラスについては、適用する必要があります、 LayoutKind.Sequential 値を明示的にします。 Tlbimp.exe (タイプ ライブラリ インポーター) も適用されます、 StructLayoutAttribute 属性は、常に適用されます、 LayoutKind.Sequential タイプ ライブラリをインポートするときの値します。

マネージ宣言を次の例に示します、 GetSystemTime 関数し、定義 MySystemTime クラス LayoutKind.Explicit レイアウトします。 GetSystemTime システム時刻を取得し、コンソールに出力します。

using System;
using System.Runtime.InteropServices;

namespace InteropSample
{   

   [StructLayout(LayoutKind.Explicit, Size=16, CharSet=CharSet.Ansi)]
   public class MySystemTime 
   {
      [FieldOffset(0)]public ushort wYear; 
      [FieldOffset(2)]public ushort wMonth;
      [FieldOffset(4)]public ushort wDayOfWeek; 
      [FieldOffset(6)]public ushort wDay; 
      [FieldOffset(8)]public ushort wHour; 
      [FieldOffset(10)]public ushort wMinute; 
      [FieldOffset(12)]public ushort wSecond; 
      [FieldOffset(14)]public ushort wMilliseconds; 
   }

   class LibWrapper
   {
      [DllImport("kernel32.dll")]
      public static extern void GetSystemTime([MarshalAs(UnmanagedType.LPStruct)]MySystemTime st);
   };

   class TestApplication
   {      
      public static void Main()
      {
         try
         {
            MySystemTime sysTime = new MySystemTime();
            LibWrapper.GetSystemTime(sysTime);
            Console.WriteLine("The System time is {0}/{1}/{2} {3}:{4}:{5}", sysTime.wDay,
               sysTime.wMonth, sysTime.wYear, sysTime.wHour, sysTime.wMinute, sysTime.wSecond);            
         }         
         catch(TypeLoadException e)
         {
            Console.WriteLine("TypeLoadException : " + e.Message);
         }
         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 以降で使用可能

この型のパブリック static (Visual Basic では Shared ) メンバーはスレッド セーフです。インスタンス メンバーの場合は、スレッド セーフであるとは限りません。

トップに戻る
表示: