[fpc-pascal]Win32 API Call
Michalis Kamburelis
michalis at camelot.homedns.org
Thu Jun 24 12:08:17 CEST 2004
Matt Emson wrote:
...
>
> It should be boolean. All Win32API return values which are BOOL translate as
> Boolean.
>
That's not true. WinAPI uses BOOL type, it's defined in WinAPI headers as
typedef int WINBOOL,*PWINBOOL,*LPWINBOOL;
...
typedef WINBOOL BOOL;
So BOOL is int. So it's 32-bit value on 32-bit systems. Compile this
simplistic program with any compiler under windows to see that BOOL
really takes 4 bytes.
#include <windows.h>
int main(int argc, char *argv[])
{
printf("%d\n", sizeof(BOOL));
return 0;
}
/* output is 4 */
Then, another simplistic program in FPC confirms that LongBool takes 4
bytes of space and Boolean 1 byte:
begin
Writeln(SizeOf(LongBool), ' ', SizeOf(Boolean));
end.
{ output is 4 1 }
In FPC Windows unit BOOL type is correctly defined as
WINBOOL = longbool;
BOOL = WINBOOL;
Summing it up: you have to use LongBool (or Windows.Bool) when
translating WinAPI functions that take or return BOOL type. Boolean is
not correct, even if it sometimes works.
--
Michalis
More information about the fpc-pascal
mailing list