[fpc-devel] THandle and 64bit platforms

Michael.VanCanneyt at Wisa.be Michael.VanCanneyt at Wisa.be
Mon Dec 20 22:50:06 CET 2004



On Mon, 20 Dec 2004, Tomas Hajny wrote:

> Date sent:      	Mon, 20 Dec 2004 21:02:04 +0100
> To:             	"FPC developers' list" <fpc-devel at lists.freepascal.org>
> From:           	Marc Weustink <marc at dommelstein.net>
> Subject:        	RE: [fpc-devel] THandle and 64bit platforms
> Send reply to:  	FPC developers' list <fpc-devel at lists.freepascal.org>
> 	<mailto:fpc-devel-request at lists.freepascal.org?subject=unsubscribe>
> 	<mailto:fpc-devel-request at lists.freepascal.org?subject=subscribe>
> 
> > > > >>>>File descriptors are still 32bit on x86_64, therefor
> > > > >>>>Thandle=32bit.
> > > > >>>
> > > > >>> A THandle is more than a file descriptor alone.
> > > > >>> Since the LCL is VCL compatible and thus MS biassed, there are
> > > > >>> more THandles than filedescriptors alone. To keep code
> > > > >>> compatible and portable, I need a 64 bit THandle on 64 bit
> > > > >>> platforms. (on win64 a handle is also 64bit). Or would you
> > > > >>> suggest to use HANDLE for a 64bit handle and THandle for 32bit
> > > > >>> ?
> > > > >>
> > > > >>THandle is platform dependent. On win64 THandle=QWord.
> > > > >>
> > > > >>Currently Thandle=longint for unix, but Thandle=DWord for win32.
> > > > >
> > > > > Yes, I am aware of that, my question however is is how to get
> > > > > things working.
> > > > >
> > > > > In the LCL a THandle is used everywhere and in most cases it
> > > > > represents a pointer. It is also part of the emulated message
> > > > > records. All members of it are defined as PtrInt. On placed
> > > > > where a handle is iused, it should map on a PtrInt.
>  .
>  .
> > That would be my choice also.
> > For me a THandle is a generic abstract identifier, which can identify
> > a file, a window, a process, a thread, a event, a bitmap, a pen, a
> > brush, a region, a font, a DC, a whatever_I_forgot_more THandle is
> > used as basetype for all these types of handles. And personally I
> > think it is a bit limitted to use it only for a filehandle.
> 
> Well, whereas I agree that handles can be more than file descriptors, 
> I don't see any connection between this fact and requirement to have 
> handles of the same size as pointers (although I understand your 
> reason)... In addition, having handles incompatible to file 
> descriptors would break Delphi compatibility as well. Proper 
> emulation of Windows handles would IMHO probably really require some 
> kind of mapping between handles and pointers as mentioned in one of 
> your previous e-mails.

In principle, a windows handle is an 'opaque' type. 
You're not supposed to make any assumptions about it's size or internal
structure.

That Windows uses the same handle type for the I/O API and it's GUI 
subsystem is an unfortunate coincidence.

Thinking about it some more I think the more 'correct' choice for Lazarus 
is to introduce a TLCLHandle type, which will be equal to a HANDLE 
(or THANDLE) type on Windows, but which probably will equal a pointer 
under e.g. GTK, and hence a 64-bit pointer on 64-bit platforms.

This will take some work :-)

That said, the RTL should also avoid confusion with the Windows/Delphi
THandle type, and introduce a cross-platform and opaque TFileHandle type. 
Which will happen to be equal to THandle on 32-bit windows. 
On 32-bit Linux, the definition of THandle will then also equal TFileHandle.

This will also take some work :-)

The 2.000.000.000 EUR question is then, who will do this work? ;-)

Michael.




More information about the fpc-devel mailing list