MarshalAsAttribute クラス

定義

マネージド コードとアンマネージド コードとの間のデータのマーシャリング方法を示します。Indicates how to marshal the data between managed and unmanaged code.

public ref class MarshalAsAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.ReturnValue, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class MarshalAsAttribute : Attribute
type MarshalAsAttribute = class
    inherit Attribute
Public NotInheritable Class MarshalAsAttribute
Inherits Attribute
継承
MarshalAsAttribute
属性

次の例では、マネージ型のフィールド、メソッドパラメーター、およびメソッドの戻り値に MarshalAsAttribute を適用します。The following example applies the MarshalAsAttribute to a field, a method parameter, and a method return value in a managed type.

using System;
using System.Text;
using System.Runtime.InteropServices;

class Program
{

//Applied to a parameter.
  public void M1([MarshalAs(UnmanagedType.LPWStr)]String msg) {}

//Applied to a field within a class.
  class MsgText {
                [MarshalAs(UnmanagedType.LPWStr)]
                public String msg = "Hello World";
                }

//Applied to a return value.
[return: MarshalAs(UnmanagedType.LPWStr)]
    public String GetMessage()
    {
        return "Hello World";
    }

static void Main(string[] args)
    {  }
}
Imports System.Runtime.InteropServices

Module Module1

    Sub Main()

    End Sub

    'Applied to a parameter.
    Public Sub M1(<MarshalAsAttribute(UnmanagedType.LPWStr)> ByVal msg As String)
        msg = msg + "Goodbye"
    End Sub

    'Applied to a field within a class.
    Class MsgText
        <MarshalAsAttribute(UnmanagedType.LPWStr)> Public msg As String
    End Class

    'Applied to a return value.
    Public Function M2() As <MarshalAsAttribute(UnmanagedType.LPWStr)> String
        Return "Hello World"
    End Function

End Module

次の例では、プロパティに MarshalAsAttribute 属性を適用します。The following example applies the MarshalAsAttribute attribute to a property:

decimal _money;   

public decimal Money 
{
   [return: MarshalAs(UnmanagedType.Currency)]
   get { return this._money; }
   [param: MarshalAs(UnmanagedType.Currency)]
   set { this._money = value; }
}
Dim _money As Decimal   

Public Property Money As <MarshalAs(UnmanagedType.Currency)> Decimal 
   Get
      Return Me._money
   End Get
   Set(<MarshalAs(UnmanagedType.Currency)> value As Decimal)
      Me._money = value
   End Set   
End Property

注釈

この属性は、パラメーター、フィールド、または戻り値に適用できます。You can apply this attribute to parameters, fields, or return values.

各データ型には既定のマーシャリング動作があるため、この属性は省略可能です。This attribute is optional, as each data type has a default marshaling behavior. この属性は、特定の型を複数の型にマーシャリングできる場合にのみ必要です。This attribute is only necessary when a given type can be marshaled to multiple types. たとえば、文字列を LPStrLPWStrLPTStr、または BStrとしてアンマネージコードにマーシャリングできます。For example, you can marshal a string to unmanaged code as either a LPStr, a LPWStr, a LPTStr, or a BStr. 既定では、共通言語ランタイムは、文字列パラメーターを BStr として COM メソッドにマーシャリングします。By default, the common language runtime marshals a string parameter as a BStr to COM methods. 個々のフィールドまたはパラメーターに MarshalAsAttribute 属性を適用することにより、特定の文字列を BStrではなく LPStr としてマーシャリングすることができます。You can apply the MarshalAsAttribute attribute to an individual field or parameter to cause that particular string to be marshaled as a LPStr instead of a BStr. Tlbexp.exe (タイプライブラリエクスポーター)は、マーシャリングの基本設定を共通言語ランタイムに渡します。The Tlbexp.exe (Type Library Exporter) passes your marshaling preferences to the common language runtime.

COM 相互運用機能またはプラットフォーム呼び出しで使用する場合、一部のパラメーターと戻り値の既定のマーシャリング動作は異なります。Some parameters and return values have different default marshaling behavior when used with COM interop or platform invoke. 既定では、ランタイムは、文字列パラメーター (および値型のフィールド) をプラットフォーム呼び出しメソッドまたは関数に LPStr としてマーシャリングします。By default, the runtime marshals a string parameter (and fields in a value type) as a LPStr to a platform invoke method or function. 詳細については、「既定のマーシャリング動作」を参照してください。For additional information, see Default Marshaling Behavior.

ほとんどの場合、属性は、次C#のシグネチャに示すように、UnmanagedType 列挙体を使用してアンマネージデータの形式を識別します。In most cases, the attribute simply identifies the format of the unmanaged data using the UnmanagedType enumeration, as shown in the following C# signature:

public void SomeMethod([MarshalAs(UnmanagedType.LPStr)] String s)
Public Sub SomeMethod(<MarshalAs(UnmanagedType.LPStr)> s As String)

一部の UnmanagedType 列挙メンバーには追加情報が必要です。Some UnmanagedType enumeration members require additional information. たとえば、UnmanagedTypeLPArray場合は、追加情報が必要になります。For example, additional information is needed when the UnmanagedType is LPArray. 配列でこの属性を使用する方法の詳細については、「配列の既定のマーシャリング」を参照してください。For a complete description of how to use this attribute with arrays, see Default Marshaling for Arrays.

Tlbimp.exe (タイプライブラリインポーター)は、パラメーター、フィールド、および戻り値にもこの属性を適用し、入力タイプライブラリのデータ型が、対応するマネージデータ型の既定の型ではないことを示します。The Tlbimp.exe (Type Library Importer) also applies this attribute to parameters, fields, and return values to indicate that the data type in the input type library is not the default type for the corresponding managed data type. Tlbimp.exe は、入力タイプライブラリで指定されている型に関係なく、String および Object 型に常に MarshalAsAttribute を適用します。Tlbimp.exe always applies the MarshalAsAttribute to String and Object types for clarity, regardless of the type specified in the input type library.

注意

MarshalAsAttribute では、ジェネリック型のマーシャリングはサポートされていません。The MarshalAsAttribute does not support marshaling of generic types.

コンストラクター

MarshalAsAttribute(Int16)

指定した MarshalAsAttribute 値を使用して、UnmanagedType クラスの新しいインスタンスを初期化します。Initializes a new instance of the MarshalAsAttribute class with the specified UnmanagedType value.

MarshalAsAttribute(UnmanagedType)

指定した MarshalAsAttribute 列挙体メンバーを使用して、UnmanagedType クラスの新しいインスタンスを初期化します。Initializes a new instance of the MarshalAsAttribute class with the specified UnmanagedType enumeration member.

フィールド

ArraySubType

アンマネージの LPArray または ByValArray の要素の型を示します。Specifies the element type of the unmanaged LPArray or ByValArray.

IidParameterIndex

COM で使用されるアンマネージ iid_is 属性のパラメーター インデックスを指定します。Specifies the parameter index of the unmanaged iid_is attribute used by COM.

MarshalCookie

カスタム マーシャラーに追加の情報を提供します。Provides additional information to a custom marshaler.

MarshalType

カスタム マーシャラーの完全修飾名を指定します。Specifies the fully qualified name of a custom marshaler.

MarshalTypeRef

MarshalType を型として実装します。Implements MarshalType as a type.

SafeArraySubType

SafeArray の要素の型を示します。Indicates the element type of the SafeArray.

SafeArrayUserDefinedSubType

SafeArray のユーザー定義要素の型を示します。Indicates the user-defined element type of the SafeArray.

SizeConst

固定長配列の要素の数、またはインポートする文字列の文字数 (バイト数ではない) を示します。Indicates the number of elements in the fixed-length array or the number of characters (not bytes) in a string to import.

SizeParamIndex

COM の size_is のように、0 から始まる配列要素のカウントを格納しているパラメーターを示します。Indicates the zero-based parameter that contains the count of array elements, similar to size_is in COM.

プロパティ

TypeId

派生クラスで実装されると、この Attribute の一意の識別子を取得します。When implemented in a derived class, gets a unique identifier for this Attribute.

(継承元 Attribute)
Value

マーシャリング後データの UnmanagedType 値を取得します。Gets the UnmanagedType value the data is to be marshaled as.

メソッド

Equals(Object)

このインスタンスが、指定されたオブジェクトと等価であるかどうかを示す値を返します。Returns a value that indicates whether this instance is equal to a specified object.

(継承元 Attribute)
GetHashCode()

このインスタンスのハッシュ コードを返します。Returns the hash code for this instance.

(継承元 Attribute)
GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(継承元 Object)
IsDefaultAttribute()

派生クラスでオーバーライドされるとき、このインスタンスの値が派生クラスの既定値であるかどうかを示します。When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(継承元 Attribute)
Match(Object)

派生クラス内でオーバーライドされたときに、指定したオブジェクトとこのインスタンスが等しいかどうかを示す値を返します。When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(継承元 Attribute)
MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(継承元 Object)
ToString()

現在のオブジェクトを表す string を返します。Returns a string that represents the current object.

(継承元 Object)

明示的なインターフェイスの実装

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

一連の名前を対応する一連のディスパッチ識別子に割り当てます。Maps a set of names to a corresponding set of dispatch identifiers.

(継承元 Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

オブジェクトの型情報を取得します。この情報はインターフェイスの型情報の取得に使用できます。Retrieves the type information for an object, which can be used to get the type information for an interface.

(継承元 Attribute)
_Attribute.GetTypeInfoCount(UInt32)

オブジェクトが提供する型情報インターフェイスの数 (0 または 1) を取得します。Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(継承元 Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

オブジェクトによって公開されたプロパティおよびメソッドへのアクセスを提供します。Provides access to properties and methods exposed by an object.

(継承元 Attribute)

適用対象

こちらもご覧ください