Hi, first, sorry my bad english. I have post this and the next two questions already in community (german language forum).
So far I could see it in the FPC sources, BOOL is declared as WINBOOL and this as longbool. In Windows general 0 mean False and any value <> 0 mean True. In the Windows API TRUE is declared as 1 (at 16, 32 and as well as 64 bit API). Additionally there exist VARIANT_TRUE (type VARIANT_BOOL = 16 bit unsigned Integer), which is declared as -1. I don't know why, but Borland declared True as -1 resp. $FFFFFFFF for the Windows boolean types. This cause problems with few Windows API function, which expect 1 as TRUE. I don't know, whether there are Windows API function, which expect -1, I have worked only with TP and Delphi. There are any compiler options in FPC to make FPC compatibel to Borland, if anybody want to do this? I have detect this, because I get a hint 'Type size mismatch, possible loss of data / range check error', if I convert Bool to Boolean. Simple example: var B1: LongBool; B2: Boolean; begin B1 := True; B2 := B1; end; I have make some tests, apparently FPC use a automatic type convert, similar to Delphi, which make sure, that the Boolean value is in a valid range: var B1: LongBool; B2: Boolean; begin B1 := LongBool(-1); B2 := B1; ShowMessage(Format('%d %d', [Ord(B1), Ord(B2)])); end; output: '-1 1'. If there is a type convert (instead of a type cast), the hint is meaningless. The same hint appear, if I use a LongBool variable with a Boolean parameter in a function. Is this a bug? BTW: Is it meaningful, that the message is identical independent whether the range check is on or off? (type_w_smaller_possible_range_check und type_h_smaller_possible_range_check) wkr Peter. _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal