Der Umrüstsatz
Von PowerBASIC kommend - Checkliste für die 64-Bit-Migration
PBXB64 erzeugt 64-Bit-Code, deshalb ändern sich einige PowerBASIC-Gewohnheiten. Diese Seite übernimmt die vollständige V23-Checkliste der Produktseite. Die Regeln sind Quell-/Dokumentationsbelege; für diese Veröffentlichung wurden keine neuen Compiler- oder Funktionstests ausgeführt.
Zur PBXB64-ÜbersichtEnglishCheckliste
| Thema | Verhalten in PBXB64 V23 |
|---|---|
| LONG | 8 Byte (64 Bit). Wo ein 32-Bit-Wert nötig ist (Win32-int), SDWORD / LONG32 verwenden. |
| INTEGER | Seit V23 2 Byte (vorher 8). Siehe MIGRATION_V23_INTEGER_TYPES.md. Für alte 64-Bit-Daten QUAD verwenden. |
| Handles und Zeiger | QUAD oder einen PTR-Typ verwenden. DWORD schneidet 64-Bit-Werte ab. |
| Konstanten | Konstanten außerhalb des Wertebereichs sind Compilerfehler (PB_FRONTEND-8531); Zuweisungen zur Laufzeit brechen um. CUINT8(300) = 44. |
| TYPE-Größe | Ein Standard-TYPE wird auf ein Vielfaches von 8 aufgefüllt (12 Byte Nutzdaten ergeben SIZEOF 16). TYPE name QWORD FILL liefert das exakte C-sizeof. |
| DECLARE ... LIB | Win32-int-Parameter und -Ergebnisse als SDWORD, Handles als QUAD (Beispiel 10). |
| Speicher | ALLOCATE; FREE ist eine Funktion; PEEK/POKE verwenden 64-Bit-Adressen (Beispiel 4). |
| Zeiger | @p dereferenziert; p = p + 1 rückt um die Zielgröße vor. @p[i] ist nicht gültig. |
| Includes | -I Includes und #INCLUDE "windows_core.pbi" verwenden; das alte Win32API-Include-Set ist nicht enthalten. |
| SUB-Parameter | Standardmäßig BYREF (beobachtet). |
| Division | / bei Ganzzahlen ist echte Division (7/2 = 3,5); (5>3) = -1. |
| Threads | Das Ziel von THREAD CREATE muss eine FUNCTION sein (Beispiel 6). |
| EXE-Größe / Importe | Etwa 75 KB für Hello World; importiert nur Windows-DLLs. |
Konkrete Migrationsmuster
Diese kurzen Muster zeigen die dokumentierten Breiten- und API-Regeln. Sie sind Anleitung und wurden für diese Veröffentlichung nicht neu ausgeführt.
INTEGER-Datensätze
TYPE OldRec
id AS QUAD
count AS QUAD
END TYPE
TYPE NewRec
id AS INTEGER
count AS INTEGER
END TYPE
' An der Migrationsgrenze bewusst verengen.
n.id = o.id
n.count = CINT(o.count AND &HFFFF)Win32-ähnliche Deklarationen
' Win32 int ist 32 Bit; ein Handle hat Zeigerbreite.
DECLARE FUNCTION GetValue LIB "example.dll" () AS SDWORD
DECLARE FUNCTION OpenThing LIB "example.dll" (BYVAL name AS STRING) AS QUADZeigerarithmetik
LOCAL p AS BYTE PTR
p = ALLOCATE(64)
POKE BYTE, p, 1
p = p + 1
ignored = FREE(p - 1)Historisches V23-Beispiel
PBXB64.exe 03_migration.bas -o 03_migration.exe
id = 7 | count =-25536
INTEGER range:-32768 .. 32767 | w =-1
CUINT8(300) = 44Die ursprüngliche Seite dokumentiert dieses Beispiel als am 5. Oktober 2026 mit PBXB64 V23 übersetzt und ausgeführt. Dieser historische Beleg bleibt erhalten; diese Detailseite behauptet keine neue Ausführung.