Az új adattípusok
A 64 bites Windowshoz három adattípust vezettünk be: rögzített pontosságú adattípusokat, mutató pontosságú típusokat és specifikus-mutató pontosságú típusokat. Ezek a típusok hozzáadva lettek a fejlesztői környezethez, hogy a fejlesztők felkészülhessenek a 64 bites Windowsra. Ezek a típusok az alapszintű C-nyelvi egész számból és a hosszú típusokból származnak. Ezért ezeket az adattípusokat használhatja a 32 bites Windowsra lefordított és tesztelt kódban, majd újrafordíthatja a 64 bites fordítóval, amikor a 64 bites Windows a cél.
Még a csak 32 bites Windowst célzó alkalmazások esetében is az új adattípusok bevezetése robusztusabbá teszi a kódot. Ezeknek az adattípusoknak a használatához be kell vizsgálnia a kódban a potenciálisan nem biztonságos mutatóhasználatot, a polimorfizmust és az adatdefiníciókat. Ha például egy változó ULONG_PTRtípusú, egyértelmű, hogy az aritmetikai műveletekhez vagy polimorfizmushoz használt mutatókhoz lesz használva. Az ilyen használatot nem lehet közvetlenül jelezni a régebbi adattípusok használatával. (Ezt közvetett módon is megteheti származtatott típuselnevezéssel vagy magyar jelöléssel, de mindkét módszer hajlamos a hibákra.)
Ezek az adattípusok a BaseTsd.h-ban vannak deklarálva. További információ, beleértve az adattípusok definícióit, lásd Windows-adattípusok.
Rögzített pontosság
A rögzített pontosságú adattípusok a 32 és a 64 bites Windows esetében is azonos hosszúságúak. Annak érdekében, hogy könnyebben megjegyezhesd, pontosságuk az adattípus nevének része. A következők a rögzített pontosságú adattípusok.
Kifejezés | Leírás |
---|---|
DWORD32 |
32 bites aláíratlan egész szám |
DWORD64 |
64 bites aláíratlan egész szám |
INT32 |
32 bites aláírt egész szám |
INT64 |
64 bites aláírt egész szám |
LONG32 |
32 bites aláírt egész szám |
LONG64 |
64 bites aláírt egész szám |
UINT32 |
Aláíratlan INT32 |
UINT64 |
Előjel nélküli INT64 |
ULONG32 |
Aláíratlan LONG32 |
ULONG64 |
Aláíratlan LONG64 |
Mutató pontossága
Ahogy a mutató pontossága megváltozik (azaz 32 bites Windows rendszeren 32, 64 bites Windows esetén pedig 64 bites lesz), a mutató pontossági adattípusai ennek megfelelően tükrözik a pontosságot. Ezért a mutató aritmetikai végrehajtásakor biztonságosan az ilyen típusúak egyikére mutatót lehet leadni; ha a mutató pontossága 64 bit, akkor a típus 64 bit. A darabszámtípusok azt a maximális méretet is tükrözik, amelyre egy mutató hivatkozhat. Az alábbiakban a mutató precizitása és a számláló típusok szerepelnek.
Kifejezés | Leírás |
---|---|
DWORD_PTR |
Alá nem írt hosszú típus a mutató pontossága érdekében. |
HALF_PTR |
A mutató méretének fele. Egy mutatót és két kis mezőt tartalmazó struktúrában használható. |
INT_PTR |
Aláírt egész számtípus a mutató pontosságához. |
LONG_PTR |
Aláírt hosszú típus a mutató pontossága érdekében. |
SIZE_T |
Az a maximális bájtszám, amelyre egy mutató hivatkozhat. Olyan számhoz használható, amely a mutató teljes tartományán át kell terjednie. |
SSIZE_T |
Aláírt SIZE_T. |
UHALF_PTR |
Aláíratlan HALF_PTR. |
UINT_PTR |
Aláíratlan INT_PTR. |
ULONG_PTR |
Aláíratlan LONG_PTR. |
Adott Pointer-Precision-típusok
Az alábbi új mutatótípusok kifejezetten méretezik a mutatót. Óvatosan használja a mutatókat 64 bites kódban: Ha 32 bites típussal deklarálja a mutatót, az operációs rendszer egy 64 bites mutató csonkolásával hozza létre a mutatót. (Minden mutató 64 bites a 64 bites Windowson.)
Kifejezés | Leírás |
---|---|
POINTER_32 |
Egy 32 bites mutató. A 32 bites Windowson ez egy natív mutató. 64 bites Windows rendszeren ez egy 64 bites mutató csonkolt verziója. |
POINTER_64 |
Egy 64 bites mutató. A 64 bites Windowson ez egy natív mutató. 32 bites Windows rendszeren ez egy 32 bites jelre bővített mutató. Vegye figyelembe, hogy nem biztonságos feltételezni a felső mutatóbit állapotát. |