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?
Bye
