Entwickler-Ecke

Windows API - LongBool


lambruco - Fr 12.09.03 11:20
Titel: LongBool
Was ist ein LongBool ?? :shock:
Ist der Typ identisch mit boolean ?
Möchte eigentlich nur den Rückgabewert von EnumChildWindows ermitteln ?


DaRkFiRe - Fr 12.09.03 12:04

Also in meiner Windows-Unit steht BOOL = LONGBOOL;

Was ich damit sagen will: LONGBOOL = BOOL = BOOLEAN = TRUE / FALSE


AndyB - Fr 12.09.03 12:24

DaRkFiRe hat folgendes geschrieben:
Was ich damit sagen will: LONGBOOL = BOOL = BOOLEAN = TRUE / FALSE

Nicht ganz.

Byte(Boolean(False)) = 0
Byte(Boolean(True)) = 1


Byte(BOOL(False)) = 0
Byte(BOOL(True)) <> 0 // hier liegt der Unterschied


Wer also direkt auf True prüft kann bei API Funktionen sein Wunder erleben.

Delphi-Quelltext
1:
if APIFunction = True                    

Muss nicht unbegingt True ergeben. Wenn APIFunction nun -1 oder 2 liefert ist das für BOOL auch TRUE. Jedoch wenn man es mit dem Boolean.True vergleicht macht der Compiler daraus ein

Delphi-Quelltext
1:
if APIFunction = 1                    

und das geht dann in die Hose.

Der Delphi-Compiler weiß von diesem Problem und wandelt Funktionsergebnisse, die vom Typ BOOL sind automatisch in den Boolean Typ um, womit es nicht zu obigem Problem kommen sollte.


lambruco - Fr 12.09.03 13:41

Heisst das, man sollte API-Funktionen immer auf false prüfen ??

also TRUE wäre dann API-Funktion <> FALSE ????


AndyB - Fr 12.09.03 15:18

Man kann

Delphi-Quelltext
1:
if APIFunction then                    

benutzen, da der Compiler dann auf <> False prüft. Wenn man aber implizit auf True prüft:

Delphi-Quelltext
1:
if APIFunction = True then                    

kann das nach hinten los gehen, muss aber nicht. Eben eine tickende Zeitbombe.