바리안트 타입(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는 배리언트 배열 내의 다음 인수를 모두 전달하기 위해 사용할 수 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "Archived copy". v1.realworldocaml.org. Archived from the original on 2019-05-08.{{cite web}}: CS1 maint: 제목으로 아카이브된 복사(링크)

외부 링크