Zitat:
Delphi-Quellcode:
PBOOL(FieldValue):= PBOOL(LongBool(svc.OwnProcess));
PBOOL(FieldValue):= PBOOL(svc.OwnProcess);
Du sagst: FieldValue, interpretiert als PBool, soll den Wert svc.OwnProcess, interpretiert als LongBool, interpretiert als PBool, haben..
Also im Grunde machst du eine 1:1 zuweisen. Der Pointer FieldValue erhält bei diesen zwei Zeilen keine
Adresse sondern einen Wert!
Bei LongBool kann das alles zwischen 0 und 2^32-1 sein!
Wenn du dann FieldValue dereferenzierst, per ^, dann greifst du auf die Adresse, welche der Inhalt von OwnProcess war, zu - was eig. knallen sollte, da da meistens 0 oder 1 drinnen steht und du keinen Zugriff auf diese Adressen haben solltest.
So ists richtig:
Delphi-Quellcode:
// Zuweisung als Pointer
FieldValue := @svc.OwnProcess));
// Änderung der originalen Referenz
FieldValue^ := false; // svc.OwnProcess = false!