INVALID_HANDLE_VALUE is not of THandle type on Linux
## Summary
On Linux x86-64 `INVALID_HANDLE_VALUE` is `DWORD(-1)` but `THandle = Longint;`.
## System Information
- **Operating system:** Linux
- **Processor architecture:** x86-64
- **Compiler version:** trunk
- **Device:** Computer
## Steps to reproduce
Compare a THandle value with INVALID_HANDLE_VALUE and you get a "Warning: Comparison might be always true due to range of constant and expression".
## Example Project
```pascal
program InvalidHandleValue;
uses SysUtils;
var
xFileHandle: THandle;
begin
xFileHandle := FileOpen('test.txt', fmOpenRead or fmShareDenyWrite);
if xFileHandle<>INVALID_HANDLE_VALUE then // InvalidHandleValue.lpr(9,17) Warning: Comparison might be always true due to range of constant and expression
begin
//
end;
end.
```
## What is the current bug behavior?
THandle is signed (-1) but INVALID_HANDLE_VALUE is unsigned, so the comparison is not executed correctly.
## What is the expected (correct) behavior?
No warning, correct comparison.
## Possible fixes
I suggest to declare INVALID_HANDLE_VALUE as:
```pascal
{$IFNDEF HAS_INVALIDHANDLE}
const
INVALID_HANDLE_VALUE = THandle(-1);
{$ENDIF}
```
Yes, I know, INVALID_HANDLE_VALUE will have different values on different OS, but that goes for e.g. sLineBreak as well.
Or if this is not wanted then do not declare INVALID_HANDLE_VALUE on Linux at all and keep it Windows only.
## Documentation
See https://www.freepascal.org/docs-html/rtl/sysutils/fileopen.html :
`On Error, THandle(-1) is returned.`
issue