UnmanagedType UnmanagedType UnmanagedType UnmanagedType Enum

정의

매개 변수나 필드를 비관리 코드로 마샬링하는 방법을 식별합니다.Identifies how to marshal parameters or fields to unmanaged code.

public enum class UnmanagedType
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public enum UnmanagedType
type UnmanagedType = 
Public Enum UnmanagedType
상속
UnmanagedTypeUnmanagedTypeUnmanagedTypeUnmanagedType
특성

필드

AnsiBStr AnsiBStr AnsiBStr AnsiBStr 35

싱글 바이트 길이 접두사가 있는 ANSI 문자열입니다.An ANSI character string that is a length-prefixed single byte. String 데이터 형식에 이 멤버를 사용할 수 있습니다.You can use this member on the String data type.

AsAny AsAny AsAny AsAny 40

런타임에서 개체의 형식을 결정하고 해당 형식으로 개체를 마샬링하는 동적 형식입니다.A dynamic type that determines the type of an object at run time and marshals the object as that type. 이 메서드는 플랫폼 호출 메서드에만 유효합니다.This member is valid for platform invoke methods only.

Bool Bool Bool Bool 2

4바이트 부울 값(true != 0, false = 0)입니다.A 4-byte Boolean value (true != 0, false = 0). Win32 BOOL 형식입니다.This is the Win32 BOOL type.

BStr BStr BStr BStr 19

더블바이트 길이 접두사가 있는 유니코드 문자열입니다.A Unicode character string that is a length-prefixed double byte. COM의 기본 문자열인 이 멤버는 String 데이터 형식에 사용할 수 있습니다.You can use this member, which is the default string in COM, on the String data type.

ByValArray ByValArray ByValArray ByValArray 30

Value 속성이 ByValArray로 설정된 경우, SizeConst 필드는 배열에 있는 요소의 수를 나타내도록 설정되어야 합니다.When the Value property is set to ByValArray, the SizeConst field must be set to indicate the number of elements in the array. ArraySubType 필드는 문자열 형식 간을 구분해야 하는 경우 배열 요소의 UnmanagedType을 포함할 수도 있습니다.The ArraySubType field can optionally contain the UnmanagedType of the array elements when it is necessary to differentiate among string types. UnmanagedType은 구조체에서 필드로 나타나는 요소가 있는 배열에만 사용할 수 있습니다.You can use this UnmanagedType only on an array that whose elements appear as fields in a structure.

ByValTStr ByValTStr ByValTStr ByValTStr 23

구조체 내에 나타나는 인라인 고정 길이 문자 배열에 사용됩니다.Used for in-line, fixed-length character arrays that appear within a structure. ByValTStr 형식은 구조체 내에서 C 스타일의 고정 크기 문자열 (예: char s[5])처럼 동작합니다.ByValTStr types behave like C-style, fixed-size strings inside a structure (for example, char s[5]). ByValTStr과 함께 사용되는 문자 형식은 포함하는 구조체에 적용된 StructLayoutAttribute 특성의 CharSet 인수에 의해 결정됩니다.The character type used with ByValTStr is determined by the CharSet argument of the StructLayoutAttribute attribute applied to the containing structure. 항상 SizeConst 필드를 사용하여 배열의 크기를 나타냅니다.Always use the SizeConst field to indicate the size of the array.

Currency Currency Currency Currency 15

통화 형식입니다.A currency type. Decimal 대신 COM 통화 형식으로 10진 값을 마샬링하기 위해 Decimal에서 사용됩니다.Used on a Decimal to marshal the decimal value as a COM currency type instead of as a Decimal.

CustomMarshaler CustomMarshaler CustomMarshaler CustomMarshaler 44

MarshalType 또는 MarshalTypeRef 필드와 함께 사용될 때 사용자 지정 마샬러 클래스를 지정합니다.Specifies the custom marshaler class when used with the MarshalType or MarshalTypeRef field. MarshalCookie 필드는 사용자 지정 마샬러에 추가 정보를 전달하는 데 사용할 수 있습니다.The MarshalCookie field can be used to pass additional information to the custom marshaler. 이 멤버는 모든 참조 형식에 사용할 수 있습니다.You can use this member on any reference type. 이 멤버는 매개 변수 및 반환 값에만 사용할 수 있습니다.This member is valid for parameters and return values only. 필드에는 사용할 수 없습니다.It cannot be used on fields.

Error Error Error Error 45

I4 또는 U4에 연결되어 있으며, 내보낸 형식 라이브러리에서 매개 변수를 HRESULT로 내보내도록 하는 네이티브 형식입니다.A native type that is associated with an I4 or an U4 and that causes the parameter to be exported as an HRESULT in the exported type library.

FunctionPtr FunctionPtr FunctionPtr FunctionPtr 38

C 스타일 함수 포인터로 사용할 수 있는 정수입니다.An integer that can be used as a C-style function pointer. 이 멤버는 Delegate 데이터 형식 또는 Delegate에서 상속된 형식에 사용할 수 있습니다.You can use this member on a Delegate data type or on a type that inherits from a Delegate.

HString HString HString HString 47

Windows 런타임Windows Runtime 문자열입니다.A Windows 런타임Windows Runtime string. String 데이터 형식에 이 멤버를 사용할 수 있습니다.You can use this member on the String data type.

I1 I1 I1 I1 3

부호 있는 1바이트 정수입니다.A 1-byte signed integer. 이 멤버를 사용하여 부울 값을 1바이트 C 스타일 bool(true = 1, false = 0)로 변환할 수 있습니다.You can use this member to transform a Boolean value into a 1-byte, C-style bool (true = 1, false = 0).

I2 I2 I2 I2 5

부호 있는 2바이트 정수입니다.A 2-byte signed integer.

I4 I4 I4 I4 7

부호 있는 4바이트 정수입니다.A 4-byte signed integer.

I8 I8 I8 I8 9

부호 있는 8바이트 정수입니다.An 8-byte signed integer.

IDispatch IDispatch IDispatch IDispatch 26

COM IDispatch 포인터(Microsoft Visual Basic 6.0의Object )입니다.A COM IDispatch pointer (Object in Microsoft Visual Basic 6.0).

IInspectable IInspectable IInspectable IInspectable 46

Windows 런타임Windows Runtime 인터페이스 포인터입니다.A Windows 런타임Windows Runtime interface pointer. Object 데이터 형식에 이 멤버를 사용할 수 있습니다.You can use this member on the Object data type.

Interface Interface Interface Interface 28

COM 인터페이스 포인터.A COM interface pointer. 인터페이스의 Guid는 클래스 메타데이터에서 얻을 수 있습니다.The Guid of the interface is obtained from the class metadata. 정확한 인터페이스 형식 또는 클래스에 적용할 경우 기본 인터페이스 형식을 지정하려면 이 멤버를 사용하세요.Use this member to specify the exact interface type or the default interface type if you apply it to a class. 이 멤버를 Object 데이터 형식에 적용하면 IUnknown과 같은 동작이 생성됩니다.This member produces the same behavior as IUnknown when you apply it to the Object data type.

IUnknown IUnknown IUnknown IUnknown 25

COM IUnknown 포인터입니다.A COM IUnknown pointer. Object 데이터 형식에 이 멤버를 사용할 수 있습니다.You can use this member on the Object data type.

LPArray LPArray LPArray LPArray 42

C 스타일 배열의 첫 번째 요소에 대한 포인터입니다.A pointer to the first element of a C-style array. 관리되는 코드에서 관리되지 않는 코드로 마샬링하면 배열의 길이는 관리되는 배열의 길이에 의해 결정됩니다.When marshaling from managed to unmanaged code, the length of the array is determined by the length of the managed array. 비관리 코드에서 관리 코드로 마샬링할 때 배열의 길이는 SizeConstSizeParamIndex 필드에서 결정되며, 문자열 형식 간을 구분해야 하는 경우 필요에 따라 배열 내 요소의 관리되지 않는 형식이 뒤에 옵니다.When marshaling from unmanaged to managed code, the length of the array is determined from the SizeConst and SizeParamIndex fields, optionally followed by the unmanaged type of the elements within the array when it is necessary to differentiate among string types.

LPStr LPStr LPStr LPStr 20

싱글 바이트 null로 끝나는 ANSI 문자열입니다.A single byte, null-terminated ANSI character string. StringStringBuilder 데이터 형식에 이 멤버를 사용할 수 있습니다.You can use this member on the String and StringBuilder data types.

LPStruct LPStruct LPStruct LPStruct 43

관리되는 서식이 지정된 클래스를 마샬링할 때 사용하는 C 스타일 구조체에 대한 포인터입니다.A pointer to a C-style structure that you use to marshal managed formatted classes. 이 메서드는 플랫폼 호출 메서드에만 유효합니다.This member is valid for platform invoke methods only.

LPTStr LPTStr LPTStr LPTStr 22

플랫폼 종속 문자열: Windows 98에서는 ANSI, Windows NT 및 Windows XP에서는 유니코드를 지원합니다.A platform-dependent character string: ANSI on Windows 98, and Unicode on Windows NT and Windows XP. LPTStr 형식의 문자열은 내보낼 수 없으므로 이 값은 플랫폼 호출에 대해서만 지원되고 COM interop에 대해서는 지원되지 않습니다.This value is supported only for platform invoke and not for COM interop, because exporting a string of type LPTStr is not supported.

LPUTF8Str LPUTF8Str LPUTF8Str LPUTF8Str 48

UTF-8로 인코딩된 문자열에 대한 포인터입니다.A pointer to a UTF-8 encoded string.

LPWStr LPWStr LPWStr LPWStr 21

2바이트 null로 끝나는 유니코드 문자열입니다.A 2-byte, null-terminated Unicode character string. 관리되지 않는 CoTaskMemAlloc 함수를 사용하여 문자열을 작성한 경우가 아니면 관리되지 않는 문자열과 함께 LPWStr 값을 사용할 수 없습니다.You cannot use the LPWStr value with an unmanaged string unless the string was created by using the unmanaged CoTaskMemAlloc function.

R4 R4 R4 R4 11

4바이트 부동 소수점 수입니다.A 4-byte floating-point number.

R8 R8 R8 R8 12

8바이트 부동 소수점 수입니다.An 8-byte floating-point number.

SafeArray SafeArray SafeArray SafeArray 29

형식, 차수, 관련된 배열 데이터의 범위를 전달하는 자동 기술 배열인 SafeArray입니다.A SafeArray, which is a self-describing array that carries the type, rank, and bounds of the associated array data. 이 멤버를 SafeArraySubType 필드와 함께 사용하여 기본 요소 형식을 재정의할 수 있습니다.You can use this member with the SafeArraySubType field to override the default element type.

Struct Struct Struct Struct 27

형식이 지정된 관리되는 클래스와 값 형식을 마샬링하는 데 사용되는 VARIANT입니다.A VARIANT, which is used to marshal managed formatted classes and value types.

SysInt SysInt SysInt SysInt 31

플랫폼 종속의 부호 있는 정수: 32비트 Windows에서는 4바이트, 64비트 Windows에서는 8바이트입니다.A platform-dependent, signed integer: 4 bytes on 32-bit Windows, 8 bytes on 64-bit Windows.

SysUInt SysUInt SysUInt SysUInt 32

플랫폼 종속의 부호 없는 정수: 32비트 Windows에서는 4바이트, 64비트 Windows에서는 8바이트입니다.A platform-dependent, unsigned integer: 4 bytes on 32-bit Windows, 8 bytes on 64-bit Windows.

TBStr TBStr TBStr TBStr 36

길이 접두사가 있는 플랫폼 종속 char 문자열: Windows 98의 ANSI, Windows NT의 유니코드.A length-prefixed, platform-dependent char string: ANSI on Windows 98, Unicode on Windows NT. BSTR과와 비슷한 이 멤버는 거의 사용하지 않습니다.You rarely use this BSTR-like member.

U1 U1 U1 U1 4

부호 없는 1바이트 정수입니다.A 1-byte unsigned integer.

U2 U2 U2 U2 6

부호 없는 2바이트 정수입니다.A 2-byte unsigned integer.

U4 U4 U4 U4 8

부호 없는 4바이트 정수입니다.A 4-byte unsigned integer.

U8 U8 U8 U8 10

부호 없는 8바이트 정수입니다.An 8-byte unsigned integer.

VariantBool VariantBool VariantBool VariantBool 37

2바이트 OLE 정의 VARIANT_BOOL 형식(true = -1, false = 0)입니다.A 2-byte, OLE-defined VARIANT_BOOL type (true = -1, false = 0).

VBByRefStr VBByRefStr VBByRefStr VBByRefStr 34

Visual Basic에서 비관리 코드의 문자열을 변경하고 결과를 관리 코드에 반영되도록 하는 데 사용할 수 있는 값입니다.A value that enables Visual Basic to change a string in unmanaged code and have the results reflected in managed code. 이 값은 플랫폼 호출에만 지원됩니다.This value is only supported for platform invoke.

예제

다음 코드 조각에서는 COM 구성 요소에서 구현 하는 관리 되지 않는 인터페이스를 관리 되는 소스 코드로 선언 하는 방법을 보여 줍니다.The following code fragment demonstrates how to declare, in managed source code, an unmanaged interface implemented by a COM component. 특성 System.Runtime.InteropServices.ComImportAttribute 은 COM에서 IMyStorage 사용 하기 위해 인터페이스를 다시 내보내지 않도록 합니다.The System.Runtime.InteropServices.ComImportAttribute attribute prevents the IMyStorage interface from being exported back for use by COM. COM 클라이언트는 기존 COM 구성 요소를 직접 사용 해야 합니다. 이 예제 MarshalAsAttribute 에서는 원래 COM UnmanagedType 인터페이스에서 사용 하는 형식을 나타내는 여러 멤버를 지정 합니다.(COM clients should use the existing COM component directly.) In this example, MarshalAsAttribute specifies several UnmanagedType members, which represent the types used by the original COM interface.

using namespace System;
using namespace System::Runtime::InteropServices;

// If you do not have a type library for an interface
// you can redeclare it using ComImportAttribute.
// This is how the interface would look in an idl file.
//[
//object,
//uuid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26"),
//dual, helpstring("IMyStorage Interface"),
//pointer_default(unique)
//]
//interface IMyStorage : IDispatch
//{
// [id(1)]
// HRESULT GetItem([in] BSTR bstrName, [out, retval] IDispatch ** ppItem);
// [id(2)]
// HRESULT GetItems([in] BSTR bstrLocation, [out] SAFEARRAY(VARIANT)* pItems);
// [id(3)]
// HRESULT GetItemDescriptions([in] BSTR bstrLocation, [out] SAFEARRAY(VARIANT) ** ppItems);
// [id(4), propget]
// HRESULT get_IsEmpty([out, retval] BOOL * pfEmpty);
//};
// This is the managed declaration.

[ComImport]
[Guid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26")]
interface class IMyStorage
{
   [DispId(1)]
   Object^ GetItem( [In,MarshalAs(UnmanagedType::BStr)]String^ bstrName );

   //[return : MarshalAs(UnmanagedType::Interface)]

   [DispId(2)]
   void GetItems( [In,MarshalAs(UnmanagedType::BStr)]String^ bstrLocation, [Out,MarshalAs(UnmanagedType::SafeArray,
   SafeArraySubType=VarEnum::VT_VARIANT)]array<Object^>^Items );

   [DispId(3)]
   void GetItemDescriptions( [In]String^ bstrLocation, [In,Out,MarshalAs(UnmanagedType::SafeArray)]array<Object^>^varDescriptions );

   property bool IsEmpty 
   {
      [DispId(4)]
      [returnvalue:MarshalAs(UnmanagedType::VariantBool)]
      bool get();
   }
};
using System;
using System.Runtime.InteropServices;

namespace MyModule
{
	// If you do not have a type library for an interface
	// you can redeclare it using ComImportAttribute.

	// This is how the interface would look in an idl file.

	//[
	//object,
	//uuid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26"),
	//dual,	helpstring("IMyStorage Interface"),
	//pointer_default(unique)
	//]
	//interface IMyStorage : IDispatch
	//{
	//	[id(1)]
	//	HRESULT GetItem([in] BSTR bstrName, [out, retval] IDispatch ** ppItem);
	//	[id(2)]
	//	HRESULT GetItems([in] BSTR bstrLocation, [out] SAFEARRAY(VARIANT)* pItems);
	//	[id(3)]
	//	HRESULT GetItemDescriptions([in] BSTR bstrLocation, [out] SAFEARRAY(VARIANT) ** ppItems);
	//	[id(4), propget]
	//	HRESULT get_IsEmpty([out, retval] BOOL * pfEmpty);
	//};

	// This is the managed declaration.

	[ComImport]
	[Guid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26")]
	public interface IMyStorage  
	{
		[DispId(1)]
		[return : MarshalAs( UnmanagedType.Interface )]
		Object GetItem( [In, MarshalAs( UnmanagedType.BStr )] String bstrName );

		[DispId(2)]
		void GetItems( [In, MarshalAs( UnmanagedType.BStr )] String bstrLocation, 
			[Out, MarshalAs( UnmanagedType.SafeArray, 
					  SafeArraySubType = VarEnum.VT_VARIANT )] out Object[] Items );
                
                
		[DispId(3)]
		void GetItemDescriptions( [In] String bstrLocation, 
			[In, Out, MarshalAs( UnmanagedType.SafeArray )] ref Object[] varDescriptions );

		bool IsEmpty 
		{
			[DispId(4)]
			[return : MarshalAs( UnmanagedType.VariantBool )]
			get;
		}
	}
}
Imports System
Imports System.Runtime.InteropServices

Module MyModule
	' If you do not have a type library for an interface
	' you can redeclare it using ComImportAttribute.

	' This is how the interface would look in an idl file.

	'[
	'object,
	'uuid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26"),
	'dual,	helpstring("IMyStorage Interface"),
	'pointer_default(unique)
	']
	'interface IMyStorage : IDispatch
	'{
	'	[id(1)]
	'	HRESULT GetItem([in] BSTR bstrName, [out, retval] IDispatch ** ppItem);
	'	[id(2)]
	'	HRESULT GetItems([in] BSTR bstrLocation, [out] SAFEARRAY(VARIANT)* pItems);
	'	[id(3)]
	'	HRESULT GetItemDescriptions([in] BSTR bstrLocation, [out] SAFEARRAY(VARIANT) ** ppItems);
	'	[id(4), propget]
	'	HRESULT get_IsEmpty([out, retval] BOOL * pfEmpty);
	'};

	' This is the managed declaration.

	<ComImport(), Guid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26")> _
	Public Interface IMyStorage
		<DispId(1)> _
		Function GetItem(<InAttribute(), MarshalAs(UnmanagedType.BStr)> ByVal bstrName As String) _
		   As <MarshalAs(UnmanagedType.Interface)> Object

		<DispId(2)> _
		Function GetItems(<InAttribute(), MarshalAs(UnmanagedType.BStr)> ByVal bstrLocation As String, _
		   <OutAttribute(), MarshalAs(UnmanagedType.SafeArray, SafeArraySubType := VarEnum.VT_VARIANT)> _
                                      ByVal Items() As Object)

		<DispId(3)> _
		Function GetItemDescriptions(<InAttribute()> ByVal bstrLocation As String, _
		   <InAttribute(), OutAttribute(), _
                      MarshalAs(UnmanagedType.SafeArray)> ByRef varDescriptions() As Object)

		<DispId(4)> _
		ReadOnly Property IsEmpty(<MarshalAs(UnmanagedType.VariantBool)> ByVal bEmpty As Boolean)

	End Interface
End Module

설명

특성이 포함 된 열거형을 사용 하 여 비관리 코드와 상호 운용 하는 동안 형식이 마샬링되는 방법을 지정 합니다. UnmanagedType System.Runtime.InteropServices.MarshalAsAttributeUse the UnmanagedType enumeration with the System.Runtime.InteropServices.MarshalAsAttribute attribute to specify how types are marshaled during interoperation with unmanaged code. 이 열거형을 사용 하 여 간단한 값 형식 (I1, I2, I4, I8, 4, R8, U2, U4 및 U8), .NET Framework에서 사용할 수 없는 관리 되지 않는 형식 및 다양 한 기타 형식을 사용 하 여 코드를 마샬링할 수 있습니다.You can use this enumeration to marshal code using simple value types (I1, I2, I4, I8, R4, R8, U2, U4, and U8), unmanaged types that are unavailable in the .NET Framework, and various miscellaneous types.

자세한 내용은 비관리 코드 상호 운용을 참조하세요.For more information, see Interoperating with Unmanaged Code.

적용 대상

추가 정보