variáns típus

Variant - A Delphi 2.0 erőteljes új típusú adatok bevitele. Alapvetően ez a jelentősége feküdt a támogatási OLE Automation (OLE Automation), ahol a Variant adattípus használják széles körben. Tény, hogy a fajta Object Pascal nyelv a Variant beágyazás lehetőségek OLE. Ahogy hamarosan megvalósítása Delphi változatok hasznosnak bizonyultak mind az egyéb szempontok a Prog. Object Pascal az egyetlen összeállított nyelvet, amelyen dolgozni megvalósítási módok OLE bevezetett speciális típusú adatok által képviselt dinamikus futási és statikus során összeállítása.

A Delphi 3 ugyanarra a célra került bevezetésre egy újabb adattípus - OleVariant, amely azonos típusú Variant, kivéve, hogy abban csak azon típusok kompatibilisek OLE. További, ebben a szakaszban Variant típusú és a különböző típusú adatok és OleVariant Variant részletesebben tárgyaljuk.

Variant - típusú dinamikus változás

A fő cél a típus Variant - lehetőséget biztosítani, hogy be újra mennuyu amelynek típusa ismeretlen fordításkor. Ez azt jelenti, hogy a nagy vezetőképességű változó típusát lehet változtatni végrehajtása során programmy.Naprimer alatt helyes és a program összeállításának és

teljesül hiba nélkül.

V: Variant; // V - Variant változó

V: = 'Delphi nagyszerű!'; // V tartalmazza a string (karakterlánc-típus)

V: = 1; // V - egész szám (Integer)

V: = 123,34; // V - valós szám (float típus)

V: = True; // V - logikai érték (logikai típusú)

V: = CreateOleObject ( 'Word.Basic'); // V tartalmazza OLE objektumot

Szerkezetének meghatározására adattípus Variant

Szerkezetének meghatározására Variant típusú leírt adatokat a rendszer modul és Vaglen

dit alábbiak szerint:

TVarType = Szó; PVarData = ^ TVarData;

ügy értéke

0: (Reserved1: Szó;

ügy értéke

0: (Reserved2, Reserved3: Szó;

ügy értéke

varSmallInt: (VSmallInt: smallint);

varInteger: (vINTEGER: Egész szám);

varSingle: (VSingle: Single);

varDouble: (VDouble: Double);

varCurrency: (VCurrency: pénzneme);

varDate: (VDate: TDateTime);

varOleStr: (VOleStr: PWideChar);

varDispatch: (VDispatch: Pointer);

varError: (VError: LongWord);

varBoolean: (VBoolean: WordBool);

varUnknown: (VUnknown: Pointer);

varShortInt: (VShortInt: ShortInt);

varByte: (VByte: Byte);

varWord: (VWord: Word);

varLongWord: (VLongWord: LongWord);

varInt64: (VInt64: Int64);

varString: (VString: Pointer); varAny: (Vany: Pointer); varArray: (VArray: PVarArray); varByRef: (VPointer: Pointer);

1: (VLongs: array [0..2] a LongInt);

2: (VWords: array [0..6] Word);

3: (VBytes: array [0..13] bájt); TVarData szerkezete foglal 16 bájt memóriát. Az első két bájt a szerkezet szót tartalmazó amelynek értéke határozza meg, hogy milyen típusú adatok SSY ugat lehetőség. A következőkben a fajlagos értékek megfelel NYM különböző típusú adatokat lehet elhelyezni olyan területen VType TVarData felvételt. A következő 6 byte bejegyzések nem használható. Az utolsó 8 bájt tartalmazza sem állandó adatok vagy egy mutatót által szolgáltatott adatok ezt az opciót. Ne kúszott megjegyezni, hogy ez a szerkezet pontosan megfelel a követelményeknek a megvalósítási módok OLE.

varEmpty = $ 0000; varNull = $ 0001; varSmallint = $ 0002; varInteger = $ 0003; varSingle = $ 0004; varDouble = $ 0005; varCurrency = $ 0006; varDate = $ 0007; varOleStr = $ 0008; varDispatch = $ 0009; varError = $ 000A; varBoolean = $ 000B; varVariant = $ 000C; varUnknown = $ 000D;

Mint látható, a fenti kódot, Variant nem tartalmazhat linket az adatok típusát mutató vagy osztályban.

A leírás TVarData rekord szerkezet magától értetődő, hogy ez valóban tartani bármilyen típusú adatot. Felvétel TVarData lehet különböztetni a fenti típusú érvényes Variant adatok. Bár a lemez változó összetételű és típusú adatok Variant (opció) hasonlít a céljuk, azok tökéletes két különböző minták. Felvétel TVarData tud tárolni a különböző típusú adatok az ugyanezen memória terület (mint egyesületek - Union C / C ++ nyelven). További információ erről a témáról, lásd később ebben a fejezetben. Az üzemeltető eset leírásában TVarData felvétel meghatározására szolgál adattípusokról lehet változata. Így, ha egy mező értékét VType varInteger, csak négy, nyolc írásadat bájt tartalmazza tárolt változó értéke. Ugyanígy, ha egy mező értékét VType kü- lönbözőképpen Byte, csak az egyik a nyolc byte az adatterület tárolására használt értékeket.

Felhívjuk figyelmét, hogy VType tartalmaz varString érték a nyolc adatbájt a rekord nem tartalmazza a tényleges húr, de csak egy mutatót is. Fontos, hogy megértsük, mióta működik a megvalósítási módok állíthatók elő vénás közvetlen hozzáférést biztosít az értékek a mezőket, amint az az alábbi példában.

Tisztában kell lenniük azzal, hogy az ilyen lehetőségek használatára - egy veszélyes játék, hiszen ebben az esetben például, könnyen tönkre egy pointert a húr, vagy más tárgy élettartama sikerült. Ennek eredményeként a tárgy hozzáférhetetlenné válik NYM a „szemétgyűjtő”, hogy vezet a memóriavesztés (szivárgó memória) és a veszteség a többi alkalmazás-erőforrások. További információk a folyamatok „szemétgyűjtő” jelenik meg a következő részben.

Kapcsolódó cikkek