바리안트 타입(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은 포함된 개체의 클래스 이름을 반환합니다.데이터는 인터페이스 포인터, 즉 가상 메서드 테이블(함수 포인터의 배열)에 대한 포인터입니다.
일반적인 용도
컬렉션
그CollectionOLE Automation의 클래스는 서로 다른 데이터 유형의 항목을 저장할 수 있습니다.컴파일 시에는 이러한 항목의 데이터 유형을 알 수 없으므로 컬렉션에 항목을 추가하고 컬렉션에서 항목을 검색하는 메서드는 변형을 사용합니다.Visual Basic의 경우For Eachconstruct가 사용되고 있는 경우, 반복기 변수는 객체 유형 또는 배리언트여야 합니다.
디스패치 메서드콜
OLE Automation에서는IDispatchinterface는 객체의 클래스를 미리 알 수 없는 경우에 사용됩니다.따라서 이러한 오브젝트에서 메서드를 호출할 때 인수 유형과 반환 값은 컴파일 시 알 수 없습니다.인수는 배리언트 배열로 전달되며 콜이 완료되면 배리언트가 반환됩니다.
옵션 파라미터
Visual Basic에서는 프로시저 인수에 접두사를 붙이면 프로시저 인수가 옵션이라고 선언할 수 있습니다.Optional키워드를 지정합니다.인수를 생략하면 Visual Basic은 위의 표에서 Missing이라고 하는 특별한 값을 프로시저에 전달합니다.이 값은 인수가 없음을 나타냅니다.값은 제공된 값 또는 특수 값일 수 있으므로 변형을 사용해야 합니다.
기능. 텍스트 가져오기(선택적. 바이밸 색인) ~하듯이 스트링 한다면 누락(색인) 그리고나서 텍스트 가져오기 = 아이템(현재 항목) 또 다른 텍스트 가져오기 = 아이템(색인) 끝. 한다면 끝. 기능. 마찬가지로 키워드ParamArray는 배리언트 배열 내의 다음 인수를 모두 전달하기 위해 사용할 수 있습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ "Archived copy". v1.realworldocaml.org. Archived from the original on 2019-05-08.
{{cite web}}: CS1 maint: 제목으로 아카이브된 복사(링크)