Die neuen Datentypen

Drei Klassen von Datentypen wurden für 64-Bit-Windows eingeführt: Datentypen mit fester Genauigkeit, Zeigergenauigkeitstypen und Typen mit bestimmter Zeigergenauigkeit. Diese Typen wurden der Entwicklungsumgebung hinzugefügt, damit Entwickler sich auf 64-Bit-Windows vorbereiten können. Diese Typen werden von den basic C-Language Integer- und long-Typen abgeleitet. Daher können Sie diese Datentypen in Code verwenden, den Sie unter 32-Bit-Windows kompilieren und testen, und dann mit dem 64-Bit-Compiler neu kompilieren, wenn sie für 64-Bit-Windows vorgesehen sind.

Auch für Anwendungen, die nur für 32-Bit-Windows vorgesehen sind, macht die Einführung dieser neuen Datentypen Ihren Code robuster. Um diese Datentypen verwenden zu können, müssen Sie Ihren Code auf potenziell unsichere Zeigerverwendung, Polymorphie und Datendefinitionen überprüfen. Wenn eine Variable beispielsweise vom Typ ULONG_PTR ist, ist es klar, dass sie zum Umwandeln von Zeigern für arithmetische Operationen oder Polymorphismus verwendet wird. Es ist nicht möglich, eine solche Verwendung direkt mithilfe der älteren Datentypen anzugeben. (Sie können dies indirekt mit abgeleiteter Typbenennung oder ungarischer Notation tun, aber beide Techniken sind fehleranfällig.)

Alle diese Datentypen werden in BaseTsd.h deklariert. Weitere Informationen, einschließlich Definitionen dieser Datentypen, finden Sie unter Windows-Datentypen.

Feste Genauigkeit

Datentypen mit fester Genauigkeit haben in 32- und 64-Bit-Windows die gleiche Länge. Damit Sie sich dies merken können, ist ihre Genauigkeit Teil des Namens des Datentyps. Im Folgenden sind die Datentypen mit fester Genauigkeit aufgeführt.

Begriff BESCHREIBUNG
DWORD32
32-Bit-Ganzzahl ohne Vorzeichen
DWORD64
64-Bit-Ganzzahl ohne Vorzeichen
INT32
32-Bit-Ganzzahl mit Vorzeichen
INT64
64-Bit-Ganzzahl mit Vorzeichen
LONG32
32-Bit-Ganzzahl mit Vorzeichen
LONG64
64-Bit-Ganzzahl mit Vorzeichen
UINT32
Unsigned INT32
UINT64
Unsigned INT64
ULONG32
Long32 ohne Vorzeichen
ULONG64
LONG64 ohne Vorzeichen

Zeigergenauigkeit

Wenn sich die Zeigergenauigkeit ändert (d. h., wenn sie unter 32-Bit-Windows zu 32 Bit und 64 Bit bei 64-Bit-Windows wird), spiegeln die Datentypen der Zeigergenauigkeit die entsprechende Genauigkeit wider. Daher ist es sicher, einen Zeiger auf einen dieser Typen zu umwandeln, wenn Zeigerarithmetik ausgeführt wird. Wenn die Zeigergenauigkeit 64 Bit beträgt, beträgt der Typ 64 Bit. Die Anzahltypen geben auch die maximale Größe an, auf die ein Zeiger verweisen kann. Im Folgenden sind die Zeigergenauigkeits- und Count-Typen aufgeführt.

Begriff BESCHREIBUNG
DWORD_PTR
Unsigned long type for pointer precision.
HALF_PTR
Die Hälfte der Größe eines Zeigers. Verwenden Sie in einer Struktur, die einen Zeiger und zwei kleine Felder enthält.
INT_PTR
Ganzzahltyp mit Vorzeichen für Zeigergenauigkeit.
LONG_PTR
Signierter long-Typ für Zeigergenauigkeit.
SIZE_T
Die maximale Anzahl von Bytes, auf die ein Zeiger verweisen kann. Verwenden Sie für eine Anzahl, die den gesamten Bereich eines Zeigers umfassen muss.
SSIZE_T
Signierte SIZE_T.
UHALF_PTR
Nicht signierte HALF_PTR.
UINT_PTR
Nicht signierter INT_PTR.
ULONG_PTR
Nicht signierte LONG_PTR.

Bestimmte Pointer-Precision-Typen

Die folgenden neuen Zeigertypen weisen die Größe des Zeigers explizit auf. Seien Sie bei der Verwendung von Zeigern in 64-Bit-Code vorsichtig: Wenn Sie den Zeiger mit einem 32-Bit-Typ deklarieren, erstellt das Betriebssystem den Zeiger, indem es einen 64-Bit-Zeiger abschneidet. (Alle Zeiger sind 64 Bits unter 64-Bit-Windows.)

Begriff BESCHREIBUNG
POINTER_32
Ein 32-Bit-Zeiger. Unter 32-Bit-Windows ist dies ein nativer Zeiger. Unter 64-Bit-Windows ist dies ein abgeschnittener 64-Bit-Zeiger.
POINTER_64
Ein 64-Bit-Zeiger. Unter 64-Bit-Windows ist dies ein nativer Zeiger. Unter 32-Bit-Windows ist dies ein zeichenweiterer 32-Bit-Zeiger.
Beachten Sie, dass es nicht sicher ist, den Zustand des HighPointer-Bits anzunehmen.