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. 예를 들어,로 관리 되지 않는 코드에 문자열로 마샬링할 수 있습니다는 LPStr, LPWStr, LPTStr, 또는 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 개별 필드 또는 매개 변수를 마샬링할 해당 특정 문자열을 특성을 LPStr 대신는 BStr합니다.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 interop를 사용 하는 경우 또는 플랫폼 호출 합니다.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가 항상 적용 됩니다는 MarshalAsAttributeStringObject 이해를 돕기 위해 입력된 형식 라이브러리에서 지정 된 형식에 관계 없이 형식입니다.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()

현재 개체를 나타내는 문자열을 반환합니다.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)

적용 대상

추가 정보