On Fri, 26 Nov 2021 13:15:07 +0100 Luca Olivetti via lazarus <lazarus@lists.lazarus-ide.org> wrote:
> Hello, > > Application.QueueAsyncCall is defined as > > procedure Application.QueueAsyncCall(const AMethod:TDataEvent; Data: > PtrInt); > > When I want to pass a string or a big structure as "Data", I create a > pointer and use that, casting it as PtrInt, then I use and free it in > the Async Method., e.g. > > procedure TServerThread.Log(const msg:string); > var > s: PString; > begin > new(s); > s^:=msg; > Application.QueueAsyncCall(@MainForm.LogServer, ptrint(s)); > end; > > procedure TMainForm.LogServer(data: ptrint); > var s:PString; > begin > ptruint(s):=data; //ptrint here gives a warning "use an unsigned > type" LogMemo.Lines.Add(s^); > Dispose(s); > end; > > > But that gives a hint "conversion between ordinals and pointers is > not portable". The suggestion I found is to use {%H-} to silence that > hint (which I did), but is there a better way? > > Why Data is defined as PtrInt and not pointer? Sometimes you need an integer, sometimes a pointer, and afair at the time when it was added the compiler did not warn typecasting PtrInt to Pointer. Mattias > > Bye -- _______________________________________________ lazarus mailing list lazarus@lists.lazarus-ide.org https://lists.lazarus-ide.org/listinfo/lazarus