MarshalAsAttribute MarshalAsAttribute MarshalAsAttribute MarshalAsAttribute Class

定義

マネージド コードとアンマネージド コードとの間のデータのマーシャリング方法を示します。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
継承
MarshalAsAttributeMarshalAsAttributeMarshalAsAttributeMarshalAsAttribute
属性

次の例では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. たとえば、 LPStr BStrLPWStr 、、またはのいずれかとして、アンマネージコードに文字列をLPTStrマーシャリングできます。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.

ほとんどの場合、属性は、次UnmanagedType C#のシグネチャに示すように、列挙体を使用してアンマネージデータの形式を識別します。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 は、入力タイプライブラリMarshalAsAttributeで指定Objectされている型に関係なく、常にを明確にするために、との型をString適用します。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(Int16) MarshalAsAttribute(Int16) MarshalAsAttribute(Int16)

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

MarshalAsAttribute(UnmanagedType) MarshalAsAttribute(UnmanagedType) MarshalAsAttribute(UnmanagedType) MarshalAsAttribute(UnmanagedType)

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

フィールド

ArraySubType ArraySubType ArraySubType ArraySubType

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

IidParameterIndex IidParameterIndex IidParameterIndex IidParameterIndex

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

MarshalCookie MarshalCookie MarshalCookie MarshalCookie

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

MarshalType MarshalType MarshalType MarshalType

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

MarshalTypeRef MarshalTypeRef MarshalTypeRef MarshalTypeRef

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

SafeArraySubType SafeArraySubType SafeArraySubType SafeArraySubType

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

SafeArrayUserDefinedSubType SafeArrayUserDefinedSubType SafeArrayUserDefinedSubType SafeArrayUserDefinedSubType

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

SizeConst SizeConst SizeConst SizeConst

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

SizeParamIndex SizeParamIndex SizeParamIndex SizeParamIndex

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

プロパティ

TypeId TypeId TypeId TypeId

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

(Inherited from Attribute)
Value Value Value Value

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

メソッド

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

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

(Inherited from Attribute)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

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

(Inherited from Attribute)
GetType() GetType() GetType() GetType()

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

(Inherited from Object)
IsDefaultAttribute() IsDefaultAttribute() IsDefaultAttribute() IsDefaultAttribute()

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

(Inherited from Attribute)
Match(Object) Match(Object) Match(Object) Match(Object)

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

(Inherited from Attribute)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

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

(Inherited from Object)
ToString() ToString() ToString() ToString()

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

(Inherited from Object)

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

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

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

(Inherited from Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

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

(Inherited from Attribute)
_Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32)

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

(Inherited from Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

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

(Inherited from Attribute)

適用対象

こちらもご覧ください