상세 컨텐츠

본문 제목

[C#] c#에서 UnmanagedType의 종류 관련

본문

반응형

 

 

 

 

=================================

=================================

=================================

 

 

 

 

 

 

출처: https://mydevnote.tistory.com/14

 

Bool : 4바이트 불리언값
ByValArray :고정길이 배열
FunctionPtr :함수 포인터
I1: 1바이트 부호화 정수
I2: 2바이트 부호화 정수
I4: 4바이트 부호화 정수
I8: 8바이트 부호화 정수
LPStr : Ansi문자열
LPStruct : C언어 구조체 포인터
LPTStr :플랫폼 독립적인 문자열.Windows98계열은 Ansi문자열Windows2000계열은Unicode 문자열
LPVoid :타입이없는4바이트 포인터
LPWStr :유니코드 문자열
R4: 4바이트 부동 소숫점
R8: 8바이트 부동 소숫점
Struct : C언어 구조체
SysInt :플랫폼 독립 부동화 정수. 32비트 OS의 경우 4바이트 64비트OS일 경우8바이트
U1: 1바이트 비부호화 정수
U2: 2바이트 비부호화 정수
U4: 4바이트 비부호화 정수
U8: 8바이트 비부호화 정수



출처: https://mydevnote.tistory.com/14 [MyDevNote]

 

 

 

 

=================================

=================================

=================================

 

 

출처: https://docs.microsoft.com/ko-kr/dotnet/api/system.runtime.interopservices.unmanagedtype?view=netframework-4.7.2

 

필드 

AnsiBStr 35 싱글 바이트 길이 접두사가 있는 ANSI 문자열입니다. String 데이터 형식에 이 멤버를 사용할 수 있습니다.
AsAny 40 런타임에서 개체의 형식을 결정하고 해당 형식으로 개체를 마샬링하는 동적 형식입니다. 이 메서드는 플랫폼 호출 메서드에만 유효합니다.
Bool 2 4바이트 부울 값(true != 0, false = 0)입니다. Win32 BOOL 형식입니다.
BStr 19 더블바이트 길이 접두사가 있는 유니코드 문자열입니다. COM의 기본 문자열인 이 멤버는 String 데이터 형식에 사용할 수 있습니다.
ByValArray 30 Value 속성이 ByValArray로 설정된 경우, SizeConst 필드는 배열에 있는 요소의 수를 나타내도록 설정되어야 합니다. ArraySubType필드는 문자열 형식 간을 구분해야 하는 경우 배열 요소의 UnmanagedType을 포함할 수도 있습니다. 이 UnmanagedType은 구조체에서 필드로 나타나는 요소가 있는 배열에만 사용할 수 있습니다.
ByValTStr 23 구조체 내에 나타나는 인라인 고정 길이 문자 배열에 사용됩니다.ByValTStr과 함께 사용되는 문자 형식은 포함하는 구조체에 적용된StructLayoutAttribute 특성의 CharSet 인수에 의해 결정됩니다. 항상 SizeConst 필드를 사용하여 배열의 크기를 나타냅니다.
Currency 15 통화 형식입니다. Decimal 대신 COM 통화 형식으로 10진 값을 마샬링하기 위해 Decimal에서 사용됩니다.
CustomMarshaler 44 MarshalType 또는 MarshalTypeRef 필드와 함께 사용될 때 사용자 지정 마샬러 클래스를 지정합니다. MarshalCookie 필드는 사용자 지정 마샬러에 추가 정보를 전달하는 데 사용할 수 있습니다. 이 멤버는 모든 참조 형식에 사용할 수 있습니다. 이 멤버는 매개 변수 및 반환 값에만 사용할 수 있습니다. 필드에는 사용할 수 없습니다.
Error 45 I4 또는 U4에 연결되어 있으며, 내보낸 형식 라이브러리에서 매개 변수를 HRESULT로 내보내도록 하는 네이티브 형식입니다.
FunctionPtr 38 C 스타일 함수 포인터로 사용할 수 있는 정수입니다. 이 멤버는Delegate 데이터 형식 또는 Delegate에서 상속된 형식에 사용할 수 있습니다.
HString 47 Windows 런타임 문자열입니다. String 데이터 형식에 이 멤버를 사용할 수 있습니다.
I1 3 부호 있는 1바이트 정수입니다. 이 멤버를 사용하여 부울 값을 1바이트 C 스타일 bool(true = 1, false = 0)로 변환할 수 있습니다.
I2 5 부호 있는 2바이트 정수입니다.
I4 7 부호 있는 4바이트 정수입니다.
I8 9 부호 있는 8바이트 정수입니다.
IDispatch 26 COM IDispatch 포인터(Microsoft Visual Basic 6.0의 Object)입니다.
IInspectable 46 Windows 런타임 인터페이스 포인터입니다. Object 데이터 형식에 이 멤버를 사용할 수 있습니다.
Interface 28 COM 인터페이스 포인터. 인터페이스의 Guid는 클래스 메타데이터에서 얻을 수 있습니다. 정확한 인터페이스 형식 또는 클래스에 적용할 경우 기본 인터페이스 형식을 지정하려면 이 멤버를 사용하세요. 이 멤버를 Object 데이터 형식에 적용하면 IUnknown과 같은 동작이 생성됩니다.
IUnknown 25 COM IUnknown 포인터입니다. Object 데이터 형식에 이 멤버를 사용할 수 있습니다.
LPArray 42 C 스타일 배열의 첫 번째 요소에 대한 포인터입니다. 관리되는 코드에서 관리되지 않는 코드로 마샬링하면 배열의 길이는 관리되는 배열의 길이에 의해 결정됩니다. 비관리 코드에서 관리 코드로 마샬링할 때 배열의 길이는 SizeConst 및 SizeParamIndex 필드에서 결정되며, 문자열 형식 간을 구분해야 하는 경우 필요에 따라 배열 내 요소의 관리되지 않는 형식이 뒤에 옵니다.
LPStr 20 싱글 바이트 null로 끝나는 ANSI 문자열입니다. String 및StringBuilder 데이터 형식에 이 멤버를 사용할 수 있습니다.
LPStruct 43 관리되는 서식이 지정된 클래스를 마샬링할 때 사용하는 C 스타일 구조체에 대한 포인터입니다. 이 메서드는 플랫폼 호출 메서드에만 유효합니다.
LPTStr 22 플랫폼 종속 문자열: Windows 98에서는 ANSI, Windows NT 및 Windows XP에서는 유니코드를 지원합니다. LPTStr 형식의 문자열은 내보낼 수 없으므로 이 값은 플랫폼 호출에 대해서만 지원되고 COM interop에 대해서는 지원되지 않습니다.
LPUTF8Str 48 UTF-8로 인코딩된 문자열에 대한 포인터입니다.
LPWStr 21 2바이트 null로 끝나는 유니코드 문자열입니다.
R4 11 4바이트 부동 소수점 수입니다.
R8 12 8바이트 부동 소수점 수입니다.
SafeArray 29 형식, 차수, 관련된 배열 데이터의 범위를 전달하는 자동 기술 배열인 SafeArray입니다. 이 멤버를 SafeArraySubType 필드와 함께 사용하여 기본 요소 형식을 재정의할 수 있습니다.
Struct 27 형식이 지정된 관리되는 클래스와 값 형식을 마샬링하는 데 사용되는 VARIANT입니다.
SysInt 31 플랫폼 종속의 부호 있는 정수: 32비트 Windows에서는 4바이트, 64비트 Windows에서는 8바이트입니다.
SysUInt 32 플랫폼 종속의 부호 없는 정수: 32비트 Windows에서는 4바이트, 64비트 Windows에서는 8바이트입니다.
TBStr 36 길이 접두사가 있는 플랫폼 종속 char 문자열: Windows 98의 ANSI, Windows NT의 유니코드. BSTR과와 비슷한 이 멤버는 거의 사용하지 않습니다.
U1 4 부호 없는 1바이트 정수입니다.
U2 6 부호 없는 2바이트 정수입니다.
U4 8 부호 없는 4바이트 정수입니다.
U8 10 부호 없는 8바이트 정수입니다.
VariantBool 37 2바이트 OLE 정의 VARIANT_BOOL 형식(true = -1, false = 0)입니다.
VBByRefStr 34 Visual Basic에서 비관리 코드의 문자열을 변경하고 결과를 관리 코드에 반영되도록 하는 데 사용할 수 있는 값입니다. 이 값은 플랫폼 호출에만 지원됩니다.

예제

다음 코드 조각에는 관리 되는 소스 코드에서 COM 구성 요소에 의해 구현 되는 관리 되지 않는 인터페이스를 선언 하는 방법을 보여 줍니다. System.Runtime.InteropServices.ComImportAttribute 특성을 방지 합니다 IMyStorage com 사용에 대 한 다시 내보내지 인터페이스 (COM 클라이언트는 기존 COM 구성 요소 직접 사용 합니다.) 이 예에서MarshalAsAttribute 몇 가지 지정 UnmanagedType 원래 COM 인터페이스에 사용 된 형식을 나타내는 멤버입니다.

C#
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; 		} 	} } 

설명

사용 하 여는 UnmanagedType 인 열거형을 System.Runtime.InteropServices.MarshalAsAttribute 형식이 비관리 코드와 상호 운용 하는 동안 마샬링되는 방법을 지정 하는 특성입니다. .NET framework에서 사용할 수 있는 간단한 값 형식 (I1, I2, I4, I8, R4, R8, U2, U4, 및 U8), 관리 되지 않는 형식 및 기타 다양 한 형식을 사용 하 여 코드를 마샬링할이 열거형을 사용할 수 있습니다.

자세한 내용은 비관리 코드 상호 운용을 참조하세요.

 

 

 

 

반응형

 

728x90

 

 

 

 

=================================

=================================

=================================

 

 

 

출처: http://blog.naver.com/PostView.nhn?blogId=gundol8004&logNo=130097411282&redirect=Dlog&widgetTypeCall=true

 

  • 정수 자료형(Intergral Types)

 

 자료형  크기  범위 
 sbyte  부호있는 1 byte 범위 정수  -128~127
 byte  부호없는 1 byte 범위 정수  0~255
 short  부호있는 2 byte 범위 정수  -32768~32767
 ushort  부호없는 2 byte 범위 정수  0~65535
 int  부호있는 4 byte 범위 정수  -2147483648~2147483647
 uint  부호없는 4 byte 범위 정수  0~4294967295
 long  부호있는 8 byte 범위 정수  -9223372036854775808       ~9223372036854775807
 ulong  부호없는 8 byte 범위 정수  0~18446744073709551615
 char  2 byte 유니코드 문자 0000~FFFF

 

*char 자료형은 정수 자료형의 일종이지만 다른 정수형으로 암시적 변환 불가능.

 

 

  • 부동소수점 자료형

 

 float  4 byte 부동 소수점 수  ±1.5×10^-45~±3.4×1038
 double  8 byte float형보다 2배정밀한수  ±5.0×10^-324±1.7×10308

 

*float형 변수에 저장할 수에는 마지막에 항상F를 붙여주어야함. 그렇지 않을 경우 double형 수로 인식.

 

 

  • 논리형(Boolean)

 

 bool  1 bit 논리형   true, false

 

 

 

  • 십진형(Decimal type)

 

 decimal  16 byte float형보다 좁고 정밀한 수  1.0×10^-28~약7.9×10^28

 

*수 가장 뒤에 M을 붙여주어야함. 그렇지 않을 경우 double형 수로 인식.

 

 

  • 나열형(Enumeration Type)
-나열형 자료는 상수의 집합으로 구성된 자료형입니다.사용법은enum 나열자이름 : 기반 자료형{멤버1,멤버2,멤버3,~~~}

 

출처 : 데브피아 김수동(sobakr)님

 

 

=================================

=================================

=================================

 

 

반응형


관련글 더보기

댓글 영역