In Windows sind ENUMs oft/meistens INT groß,
In Delphi aber so klein, wie möglich, womit dein TPowerRequestType also nur ein Byte ist, anstatt 4 Byte.
Hier kommt es dann drauf an, wie die Speicherausrichtung und Position der Variablen arbeiten, also ob hinter diesem Byte zufällig noch 3 ungenutzte Bytes liegen, gefüllt mit Nullen,
was natürlich von den Einstellungen z.B. der Codeoptimierung abhängt.
Im Debug-Modus liegen Variablen oft auf dem Stack/Heap, damit der Debugger eine feste Stelle zum Auslesen hat, während es im Release auch in die Register wandern kann.
Für TPowerRequestType also unnbedingt mit
{$MinEnumSize 4}
arbeiten.
(leider gibt es kein MinimumSetSize, für sowas braucht man dann eventuell ein , dummy=31);
am Ende)
Und beim TReasonContext entweder ein passendes
{$ALIGN 4}
(
Win32 ... Win64 eventuell anders) oder mit PACKED RECORD und eventuellen Füll-Bytes arbeiten,
denn je nach DelphiVersion und Zielplattform ändern sich Grundeinstellungen von $ALIGN schonmal.
PS: Der Typ von POWER_REQUEST_TYPE wird in der Online-Docu nicht genannt, (aber erfahrungsgemäß wird es zu 99.9995% ein INT, UINT oder DWORD sein)
hier kannst dir nur das Windows-
SDK runterladen und in der unten genannten Header-Datei "winbase.h" (C++) nachsehn, falls keine andere Quelle so nett ist und das nennt.
POWER_REQUEST_TYPE
Ein Therapeut entspricht 1024 Gigapeut.