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. |