Változat típusa (COM) - Variant type (COM)

Variant egy adattípus egyes programozási nyelvek, különösen a Visual Basic , OCaml , Delphi és C ++ , ha a Component Object Model . Ez a névadó koncepció megvalósítása a számítástechnikában .

A Visual Basic (és a Visual Basic for Applications ) rendszerben a Variant adattípus egy címkézett unió , amely bármely más adattípus (például egész szám , lebegőpontos , egyszeres és kettős pontosság, objektum stb.) Ábrázolására használható . rögzített hosszúságú karakterlánc típus kivételével. A Visual Basicben minden olyan változó, amelyet nem kifejezetten deklaráltak, vagy amelynek típusa nincs kifejezetten deklarálva, egy változat.

Bár nem kifejezetten nem deklarált változatok használata nem ajánlott, azok akkor lehetnek hasznosak, ha a szükséges adattípus csak futásidőben ismerhető meg, ha az adattípus várhatóan változik, vagy ha opcionális paramétereket és paraméter tömböket kívánnak. Sőt, a nyelvek egy dinamikus típusú rendszer gyakran variáns, mint a csak álló típusú változók.

A Visual Basic .NET fő változásai között , mivel .NET nyelv, a változat típusát felváltotta a .NET objektumtípus . A koncepcióban vannak hasonlóságok, de jelentős különbségek is, és e két típus között nincs közvetlen konverzió. A konverziókhoz - ha a Visual Basic .NET kód interakcióba lép a Visual Basic 6 COM objektummal - a normál módszertan a .NET felosztás használata .

Példák

A Visual Basicben az A nevű változat kifejezetten vagy implicit módon deklarálható:

Dim A
Dim A as Variant

A Delphi -ben az A nevű változatot a következő módon deklarálják:

var A: variant;

Formátum

A Variant típusú változónak, a rövidség kedvéért "változatnak" nevezve, ahogy azt a Visual Basic meghatározza, 16 bájtos tárhelyre van szüksége, és elrendezése a következő:

Eltolás Méret Leírás
0 2 A VarType által visszaadott érték; megadja, hogy a változat milyen adatokat tartalmaz.
2 6 Foglalt bájtok; nullára kell állítani.
8 akár 8 A változat által tartalmazott adatok.

Típusok

Következzen néhány példa a Visual Basic programban megtalálható változatokra. Más nyelveken más változatok is használhatók.

VarType Hex Propvariáns típus Támogató tag TypeName Adatbájtok C és C ++ típusú
0 0x00 VT_EMPTY Egyik sem Üres 1
1 0x01 VT_NULL Egyik sem Null 2
2 0x02 VT_I2 iVal Egész szám 2A00 RÖVID
3 0x03 VT_I4 lVal Hosszú 2A000000 HOSSZÚ
4 0x04 VT_R4 fltVal Egyetlen 00002842 ÚSZÓ
5 0x05 VT_R8 dblVal Kettős 0000000000004540 KETTŐS
6 0x06 VT_CY cyVal Valuta A068060000000000 CY szerkezet
7 0x07 VT_DATE dátum Dátum 00000000C0D5E140 DATE (dupla)
8 0x08 VT_BSTR bstrVal Húr xxxxxxxx (BSTR) :( OLECHAR *) :( WCHAR *) :( wchar_t *)
9 0x09 VT_DISPATCH pdispVal
10 0x0a VT_ERROR pásztázott Hiba 2A000A80 HRESULT (hosszú int)
11 0x0b VT_BOOL boolVal Boolean FFFF VARIANT_BOOL (rövid)
12 0x0c VT_VÁLTOZAT pvarVal Változat VÁLTOZAT
13 0x0d VT_UNKNOWN punkVal Semmi 4 00000000 Ismeretlen *
14 0x0e VT_DECIMAL decVal DECIMÁLIS
16 0x10 VT_I1 cVal Byte CHAR
17 0x11 VT_UI1 bVal Byte 2A BYTE (előjel nélküli karakter)
18 0x12 VT_UI2 uiVal WORD (rövid előjel nélkül)
19 0x13 VT_UI4 ulVal DWORD (előjel nélküli int)
20 0x14 VT_I8 hVal
21 0x15 VT_UI8 uhVal
22 0x16 VT_INT intVal
23 0x17 VT_UINT uintVal
24 0x18 VT_VOID
25 0x19 VT_HRESULT Hiányzik 3 80020004 HRESULT (hosszú int)
26 0x1a VT_PTR
27 0x1b VT_SAFEARRAY parray
28 0x1c VT_CARRAY
29 0x1d VT_USERDEFINED
30 0x1e VT_LPSTR pszVal
31 0x1f VT_LPWSTR pwszVal
36 0x24 VT_RECORD
37 0x25 VT_INT_PTR pintVal
38 0x26 VT_UINT_PTR puintVal
8192 0x2000 VT_ARRAY parray
9 Tárgy hivatkozás 5 xxxxxxxx Ismeretlen *
  • 1 Az inicializálatlan változat típusa.
  • 2 Az adatbázis NULL értékének típusa, azaz nem inicializálatlan, és nem egyenértékű a C ++ nullmutatóval .
  • 3 A hiányzó argumentumok valójában egy adott hibaérték "paraméter nem található" címmel.
  • 4 Az objektumtípus null hivatkozásra van állítva.
  • 5 A TypeName a megadott objektum osztályának nevét adja vissza. Az adatok egy interfész -mutató, azaz egy mutató mutatója egy virtuális metódustáblára (amely egy függvénymutató tömb).

Gyakori felhasználások

Gyűjtemények

Az OLE AutomationCollection osztálya különböző adattípusokat képes tárolni. Mivel ezeknek az elemeknek az adattípusa nem ismert a fordítás idején, az elemek gyűjteményhez való hozzáadásának és lekérésének módszerei változatokat használnak. Ha a Visual Basicben a konstrukciót használják, az iterátor változónak objektumtípusnak vagy változatnak kell lennie. For Each

Feladási módszer hívások

Az OLE Automationben az IDispatchinterfészt akkor használják, ha egy objektum osztályát nem lehet előre tudni. Ezért amikor metódust hívunk egy ilyen objektumon, az argumentumok típusai és a visszatérési érték nem ismertek a fordítás idején. Az argumentumok változatok tömbjeként kerülnek átadásra, és amikor a hívás befejeződik, egy változatot ad vissza.

Opcionális paraméterek

A Visual Basicben az eljárás argumentumot választhatónak nyilváníthatjuk, ha azt a Optionalkulcsszóval előtaggal látjuk el . Ha az argumentum elhagyható Visual Basic átmegy a különleges értéket eljárással, az úgynevezett Hiányzik a fenti táblázatban, jelezve, hogy az érvelés hiányzik. Mivel az érték lehet egy megadott érték vagy egy speciális érték, egy változatot kell használni.

Function GetText(Optional ByVal Index) As String
    If IsMissing(Index) Then
        GetText = Item(CurrentItem)
    Else
        GetText = Item(Index)
    End If
End Function

Hasonlóképpen a kulcsszó ParamArrayhasználható az összes következő argumentum átadására egy variáns tömbben.

Lásd még

Hivatkozások

Külső linkek