바리안트 타입(COM)
Variant type (COM)Variant는 특정 프로그래밍 언어(특히 Component Object Model을 사용하는 경우 Visual Basic, OCaml,[1] Delphi 및 C++)의 데이터 유형입니다.이것은 컴퓨터 공학에서 익명의 개념을 구현한 것이다.
Visual Basic(및 Visual Basic for Applications)에서 Variant 데이터 유형은 태그 부착 결합으로 고정 길이 문자열 유형을 제외한 다른 데이터 유형(예: 정수, 부동 소수점, 단일 및 이중 정밀도, 개체)을 나타낼 수 있습니다.Visual Basic에서는 명시적으로 선언되지 않은 변수 또는 명시적으로 선언되지 않은 변수는 변종으로 간주됩니다.
명시적으로 선언되지 않은 바리안트의 사용은 권장되지 않지만 필요한 데이터 유형을 런타임에만 알 수 있거나 데이터 유형이 변경될 것으로 예상되는 경우 또는 옵션 파라미터와 파라미터 배열이 필요할 때 사용할 수 있습니다.실제로 동적 유형 시스템을 사용하는 언어에는 변수에 사용할 수 있는 유일한 유형으로 변형이 있는 경우가 많습니다.
Visual Basic의 주요 변경 사항 중 하나.NET, 가 됩니다.NET 언어, 바리안트타입이 로 대체되었습니다.NET 오브젝트 타입개념상 유사성이 있지만 큰 차이도 있어 이 두 유형 간에 직접적인 변환은 존재하지 않습니다.변환의 경우 Visual Basic의 경우 필요할 수 있습니다.NET 코드는 Visual Basic 6 COM 객체와 상호 작용하고 있습니다.일반적인 방법론은 를 사용하는 것입니다.NET 마샬링
예
Visual Basic에서는 A라는 이름의 변종을 명시적으로 또는 암묵적으로 선언할 수 있습니다.
어둡다 A 어둡다 A ~하듯이 변종
델파이에서는 A라는 이름의 변종이 다음과 같이 선언됩니다.
변화하다 A: 변종;
포맷
Visual Basic에서 정의된 "변수"라고 하는 간결성을 위해 변종 유형의 변수는 16바이트의 스토리지가 필요하며 그 레이아웃은 다음과 같습니다.
오프셋 | 크기 | 묘사 |
---|---|---|
0 | 2 | VarType에서 반환되는 값. 변종에 포함된 데이터의 종류를 지정합니다. |
2 | 6 | 예약된 바이트. 0으로 설정해야 합니다. |
8 | 최대 8개 | 변형에 포함된 데이터입니다. |
종류들
다음은 Visual Basic에서 볼 수 있는 몇 가지 변형 예입니다.다른 언어에서는 다른 종류의 변형도 사용할 수 있습니다.
VarType(유형) | 16진수 | 프로바리안트 타입 | 프로바리안트 멤버 | 유형명 | 데이터 바이트 | C 및 C++ 타입 |
---|---|---|---|---|---|---|
0 | 0x00 | VT_EMPTY | 없음. | 비어1 있다 | ||
1 | 0x01 | VT_NULL | 없음. | 특수한2 순서 | ||
2 | 0x02 | VT_I2 | iVal | 정수 | 2A00 | 짧다 |
3 | 0x03 | VT_I4 | 값 | 긴 | 2A000000 | 긴 |
4 | 0x04 | VT_R4 | 플랫밸런스 | 싱글 | 00002842 | 흘러가다 |
5 | 0x05 | VT_R8 | dblVal | 이중 | 0000000000004540 | 더블 |
6 | 0x06 | VT_CY | cyVal | 통화 | A06806000000000000 | CY 구조 |
7 | 0x07 | VT_날짜 | 날짜. | 날짜. | 000000C0D5E140 | 날짜(더블) |
8 | 0x08 | VT_BSTR | 동작 | 스트링 | xxxxxxxxxxxxxxxxxxx. | (BSTR):(OLECHAR *):(WCHAR *):(wchar_t *) |
9 | 0x09 | VT_DISPATCH | pdispVal | |||
10 | 0x0a | VT_ERROR | 흠집내다 | 에러 | 2A000A80 | HRESULT(긴 길이) |
11 | 0x0b | VT_BOOL | 부울값 | 부울 | 오프 | VARIANT_BOOL(짧은 길이) |
12 | 0x0c | VT_VARIENT | pvarVal | 변종 | 변종 | |
13 | 0x0d | VT_UNKNOWN | 펑크값 | 아무것도4 없다 | 00000000 | 알 수 없음* |
14 | 0x0e | VT_DECIMAL | 데시 | 십진수 | ||
16 | 0x10 | VT_I1 | cVal | 바이트 | 문자 | |
17 | 0x11 | VT_UI1 | 값 | 바이트 | 2A | 바이트(서명되지 않은 문자) |
18 | 0x12 | VT_UI2 | uiVal | WORD(부호 없는 쇼트) | ||
19 | 0x13 | VT_UI4 | ulval | DWORD(부호 없음) | ||
20 | 0x14 | VT_I8 | hVal | |||
21 | 0x15 | VT_UI8 | uhVal | |||
22 | 0x16 | VT_INT | 인트라밸런스 | |||
23 | 0x17 | VT_INT | uintVal | |||
24 | 0x18 | VT_VOID | ||||
25 | 0x19 | VT_HRESULT | 실종된3 | 80020004 | HRESULT(긴 길이) | |
26 | 0x1a | VT_PTR | ||||
27 | 0x1b | VT_SAFERRAY | 파레이 | |||
28 | 0x1c | VT_CARRAY | ||||
29 | 0x1d | VT_사용자 정의 | ||||
30 | 0x1e | VT_LPSTR | pszVal | |||
31 | 0x1f | VT_LPWSTR | pwszVal | |||
36 | 0x24 | VT_RECORD | ||||
37 | 0x25 | VT_INT_PTR | 파인트밸 | |||
38 | 0x26 | VT_UINT_PTR | 동작 | |||
8192 | 0x2000 | VT_ARRAY | 파레이 | |||
9 | 오브젝트 레퍼런스5 | xxxxxxxxxxxxxxxxxxx. | 알 수 없음* |
- 1 초기화되지 않은 변형 유형입니다.
- 2 데이터베이스의 NULL 값 유형.즉, 초기화되지 않았거나 C++ 늘 포인터와 동등하지 않습니다.
- 3 누락된 인수는 실제로 "parameter not found"라는 제목의 특정 오류 값입니다.
- 4 개체 유형이 null 참조로 설정되었습니다.
- 5 TypeName은 포함된 개체의 클래스 이름을 반환합니다.데이터는 인터페이스 포인터, 즉 가상 메서드 테이블(함수 포인터의 배열)에 대한 포인터입니다.
일반적인 용도
컬렉션
그Collection
OLE Automation의 클래스는 서로 다른 데이터 유형의 항목을 저장할 수 있습니다.컴파일 시에는 이러한 항목의 데이터 유형을 알 수 없으므로 컬렉션에 항목을 추가하고 컬렉션에서 항목을 검색하는 메서드는 변형을 사용합니다.Visual Basic의 경우For Each
construct가 사용되고 있는 경우, 반복기 변수는 객체 유형 또는 배리언트여야 합니다.
디스패치 메서드콜
OLE Automation에서는IDispatch
interface는 객체의 클래스를 미리 알 수 없는 경우에 사용됩니다.따라서 이러한 오브젝트에서 메서드를 호출할 때 인수 유형과 반환 값은 컴파일 시 알 수 없습니다.인수는 배리언트 배열로 전달되며 콜이 완료되면 배리언트가 반환됩니다.
옵션 파라미터
Visual Basic에서는 프로시저 인수에 접두사를 붙이면 프로시저 인수가 옵션이라고 선언할 수 있습니다.Optional
키워드를 지정합니다.인수를 생략하면 Visual Basic은 위의 표에서 Missing이라고 하는 특별한 값을 프로시저에 전달합니다.이 값은 인수가 없음을 나타냅니다.값은 제공된 값 또는 특수 값일 수 있으므로 변형을 사용해야 합니다.
기능. 텍스트 가져오기(선택적. 바이밸 색인) ~하듯이 스트링 한다면 누락(색인) 그리고나서 텍스트 가져오기 = 아이템(현재 항목) 또 다른 텍스트 가져오기 = 아이템(색인) 끝. 한다면 끝. 기능.
마찬가지로 키워드ParamArray
는 배리언트 배열 내의 다음 인수를 모두 전달하기 위해 사용할 수 있습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ "Archived copy". v1.realworldocaml.org. Archived from the original on 2019-05-08.
{{cite web}}
: CS1 maint: 제목으로 아카이브된 복사(링크)