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-ÜbersichtEnglish

Checkliste

ThemaVerhalten in PBXB64 V23
LONG8 Byte (64 Bit). Wo ein 32-Bit-Wert nötig ist (Win32-int), SDWORD / LONG32 verwenden.
INTEGERSeit V23 2 Byte (vorher 8). Siehe MIGRATION_V23_INTEGER_TYPES.md. Für alte 64-Bit-Daten QUAD verwenden.
Handles und ZeigerQUAD oder einen PTR-Typ verwenden. DWORD schneidet 64-Bit-Werte ab.
KonstantenKonstanten außerhalb des Wertebereichs sind Compilerfehler (PB_FRONTEND-8531); Zuweisungen zur Laufzeit brechen um. CUINT8(300) = 44.
TYPE-GrößeEin 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 ... LIBWin32-int-Parameter und -Ergebnisse als SDWORD, Handles als QUAD (Beispiel 10).
SpeicherALLOCATE; 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-ParameterStandardmäßig BYREF (beobachtet).
Division/ bei Ganzzahlen ist echte Division (7/2 = 3,5); (5>3) = -1.
ThreadsDas Ziel von THREAD CREATE muss eine FUNCTION sein (Beispiel 6).
EXE-Größe / ImporteEtwa 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 QUAD

Zeigerarithmetik

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) = 44

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