UnmanagedType 열거형
매개 변수나 필드를 비관리 코드로 마샬링하는 방법을 식별합니다.
네임스페이스: System.Runtime.InteropServices
어셈블리: mscorlib(mscorlib.dll)
구문
‘선언
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Enumeration UnmanagedType
‘사용 방법
Dim instance As UnmanagedType
[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum UnmanagedType
[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum class UnmanagedType
/** @attribute SerializableAttribute() */
/** @attribute ComVisibleAttribute(true) */
public enum UnmanagedType
SerializableAttribute
ComVisibleAttribute(true)
public enum UnmanagedType
멤버
멤버 이름 | 설명 | |
---|---|---|
AnsiBStr | 싱글 바이트 길이 접두사가 있는 ANSI 문자열입니다. String 데이터 형식에 이 멤버를 사용할 수 있습니다. | |
AsAny | 런타임에서 개체의 형식을 결정하고 해당 형식으로 개체를 마샬링하는 동적 형식입니다. 플랫폼 호출 메서드에만 유효합니다. | |
Bool | 4바이트 부울 값(true != 0, false = 0)입니다. Win32 BOOL 형식입니다. | |
BStr | 더블바이트 길이 접두사가 있는 유니코드 문자열입니다. COM의 기본 문자열인 이 멤버는 String 데이터 형식에 사용할 수 있습니다. | |
ByValArray | MarshalAsAttribute.Value가 ByValArray로 설정된 경우, SizeConst는 배열에 있는 요소의 수를 나타내도록 설정되어야 합니다. ArraySubType 필드는 문자열 형식 사이에서 구별을 지을 필요가 있는 경우 배열 요소의 UnmanagedType을 포함할 수도 있습니다. 또한 이 UnmanagedType은 구조체에서 필드로 나타나는 배열에만 사용할 수 있습니다. | |
ByValTStr | 구조체 내에 나타나는 인라인 고정 길이 문자 배열에 사용됩니다. 포함하는 구조체에 적용된 System.Runtime.InteropServices.StructLayoutAttribute의 System.Runtime.InteropServices.CharSet 인수에 의해 결정된 ByValTStr와 함께 사용된 문자 형식입니다. 항상 MarshalAsAttribute.SizeConst 필드를 사용하여 배열의 크기를 나타내십시오.
.NET Framework의 ByValTStr 형식은 구조체 내의 C 스타일 고정 크기 문자열(예: |
|
Currency | Decimal 대신 COM 통화 형식으로 10진 값을 마샬링하기 위해 System.Decimal에서 사용됩니다. | |
CustomMarshaler | MarshalAsAttribute.MarshalType 또는 MarshalAsAttribute.MarshalTypeRef와 함께 사용될 때 사용자 지정 마샬러 클래스를 지정합니다. MarshalAsAttribute.MarshalCookie 필드는 사용자 지정 마샬러에게 추가 정보를 전달하는 데 사용할 수 있습니다. 이 멤버는 모든 참조 형식에 사용할 수 있습니다. | |
Error | I4 또는 U4와 관련된 네이티브 형식은 매개 변수가 내보낸 형식 라이브러리에 있는 HRESULT로 내보내지도록 합니다. | |
FunctionPtr | C 스타일 함수 포인터로 사용할 수 있는 정수입니다. 이 멤버는 Delegate 데이터 형식 또는 Delegate에서 상속된 형식에 사용할 수 있습니다. | |
I1 | 부호 있는 1바이트 정수입니다. 이 멤버를 사용하여 부울 값을 1바이트 C 스타일 bool(true = 1, false = 0)로 변환할 수 있습니다. | |
I2 | 부호 있는 2바이트 정수입니다. | |
I4 | 부호 있는 4바이트 정수입니다. | |
I8 | 부호 있는 8바이트 정수입니다. | |
IDispatch | COM IDispatch 포인터(Microsoft Visual Basic 6.0의 Object)입니다. | |
Interface | COM 인터페이스 포인터. 인터페이스의 Guid는 클래스 메타데이터에서 얻을 수 있습니다. 정확한 인터페이스 형식 또는 클래스에 적용할 경우 기본 인터페이스 형식을 지정하려면 이 멤버를 사용하십시오. 이 멤버를 Object 데이터 형식에 적용하면 UnmanagedType.IUnknown 동작을 생성합니다. | |
IUnknown | COM IUnknown 포인터 Object 데이터 형식에 이 멤버를 사용할 수 있습니다. | |
LPArray | C 스타일 배열의 첫 번째 요소에 대한 포인터입니다. 관리되는 배열에서 관리되지 않는 배열로 마샬링하면 배열의 길이는 관리되는 배열의 길이에 의해 결정됩니다. 비관리 코드에서 관리 코드로 마샬링할 때 배열의 길이는 문자열 형식 사이에서 구별을 지을 필요가 있는 경우 배열 내 요소의 관리되지 않는 형식이 뒤에 나올 수도 MarshalAsAttribute.SizeConst 및 MarshalAsAttribute.SizeParamIndex 필드를 통해 결정됩니다. | |
LPStr | 싱글 바이트 null로 끝나는 ANSI 문자열입니다. System.String 또는 System.Text.StringBuilder 데이터 형식에 이 멤버를 사용할 수 있습니다. | |
LPStruct | 관리되는 서식이 지정된 클래스를 마샬링할 때 사용하는 C 스타일 구조체에 대한 포인터입니다. 플랫폼 호출 메서드에만 유효합니다. | |
LPTStr | 플랫폼 종속 문자열, 즉 Windows 98에서는 ANSI, Windows NT 및 Windows XP에서는 유니코드입니다. LPTStr 형식의 문자열을 내보낼 수 없으므로 이 값은 플랫폼 호출에 대해서만 지원되고 COM interop에 대해서는 지원되지 않습니다. | |
LPWStr | 2바이트 null로 끝나는 유니코드 문자열입니다.
관리되지 않는 CoTaskMemAlloc 함수를 사용하여 관리되지 않는 문자열을 만든 경우가 아니면 해당 문자열과 LPWStr 값을 함께 사용할 수 없습니다. |
|
R4 | 4바이트 부동 소수점 수입니다. | |
R8 | 8바이트 부동 소수점 수입니다. | |
SafeArray | SafeArray는 형식, 차수, 관련된 배열 데이터의 범위를 전달하는 자동 기술 배열입니다. 이 멤버를 MarshalAsAttribute.SafeArraySubType 필드와 함께 사용하여 기본 요소 형식을 재정의할 수 있습니다. | |
Struct | 형식이 지정된 관리되는 클래스와 값 형식을 마샬링하는 데 사용되는 VARIANT입니다. | |
SysInt | 플랫폼에 종속적인 부호 있는 정수입니다. 32비트 Windows에서는 4바이트, 64비트 Windows에서는 8바이트입니다. | |
SysUInt | 플랫폼에 종속적인 부호 없는 정수입니다. 32비트 Windows에서는 4바이트, 64비트 Windows에서는 8바이트입니다. | |
TBStr | 길이 접두사가 있는 플랫폼에 종속적인 char 문자열입니다. Windows 98에서는 ANSI, Windows NT에서는 유니코드입니다. BSTR과 비슷한 이 멤버는 거의 사용하지 않습니다. | |
U1 | 부호 없는 1바이트 정수입니다. | |
U2 | 부호 없는 2바이트 정수입니다. | |
U4 | 부호 없는 4바이트 정수입니다. | |
U8 | 부호 없는 8바이트 정수입니다. | |
VariantBool | 2바이트 OLE 정의 VARIANT_BOOL 형식(true = -1, false = 0)입니다. | |
VBByRefStr | Visual Basic 2005에서 비관리 코드의 문자열을 변경할 수 있고 결과가 관리 코드에 반영되도록 합니다. 이 값은 플랫폼 호출에만 지원됩니다. |
설명
UnmanagedType 열거형과 System.Runtime.InteropServices.MarshalAsAttribute를 함께 사용하여 비관리 코드와 상호 운용될 때 형식이 마샬링되는 방법을 지정할 수 있습니다. 이 열거형을 사용하면 단순 값 형식(I1, I2, I4, I8, R4, R8, U2, U4 및 U8), .NET Framework에서 사용할 수 없는 관리되지 않는 형식 및 기타 다양한 형식을 사용하여 코드를 마샬링할 수 있습니다.
자세한 내용은 비관리 코드와의 상호 운용을 참조하십시오.
예제
다음 코드 조각에서는 COM 구성 요소에 의해 구현되는 관리되지 않는 인터페이스를 관리되는 소스 코드에서 선언하는 방법을 보여 줍니다. System.Runtime.InteropServices.ComImportAttribute 특성은 COM에서 사용하기 위해 IMyStorage
인터페이스를 다시 내보내지 못하게 합니다 COM 클라이언트는 기존 COM 구성 요소를 직접 사용해야 합니다. 이 예제에서 MarshalAsAttribute는 원래 COM 인터페이스에서 사용하는 형식을 나타내는 몇 가지 UnmanagedType 멤버를 지정합니다.
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)> 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
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;
}
}
}
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();
}
};
import System.*;
import 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.
/** @attribute ComImport()
*/
/** @attribute Guid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26")
*/
public interface IMyStorage
{
/** @attribute DispId(1)
*/
Object GetItem(
/** @attribute In()
@attribute MarshalAs(UnmanagedType.BStr)
*/String bstrName);
/** @attribute DispId(2)
*/
void GetItems(
/** @attribute In()
@attribute MarshalAs(UnmanagedType.BStr)
*/String bstrLocation,
/** @attribute Out()
@attribute MarshalAs(UnmanagedType.SafeArray,
SafeArraySubType = VarEnum.VT_VARIANT)
*/Object Items[]);
/** @attribute DispId(3)
*/
void GetItemDescriptions(
/** @attribute In()
*/String bstrLocation,
/** @attribute In()
@attribute Out()
@attribute MarshalAs(UnmanagedType.SafeArray)
*/Object varDescriptions[]);
/** @attribute DispId(4)
*/
/** @return MarshalAs(UnmanagedType.VariantBool)
*/
boolean get_IsEmpty();
} //IMyStorage
플랫폼
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.
버전 정보
.NET Framework
2.0, 1.1, 1.0에서 지원
.NET Compact Framework
2.0, 1.0에서 지원
참고 항목
참조
System.Runtime.InteropServices 네임스페이스
MarshalAsAttribute 클래스
ComImportAttribute 클래스