[fpc-pascal] Library callback : how do I do that?

Henry Vermaak henry.vermaak at gmail.com
Thu Aug 8 12:58:44 CEST 2013

On Thu, Aug 08, 2013 at 11:34:53AM +0100, Lukasz Sokol wrote:
> This would be fine, IFF i was adding this to the main form of my
> application...  but I'm not. I'm trying to wrap this .dll in a
> separate unit, only communicating to the form through a wrapper
> object, defined in a separate unit.  The object itself, would be
> created /by/ the form window, but won't be a GUI object, so won't be
> in the message queue;
> Doing a chain like:
> (Setup) (form passes its handle to the object) -> (object installs
> callback function) and then (normal operation) (form receives callback
> via Windows Message) -> (form calls e.g OnCallback function of the
> object)
> seems a bit backwards.
> I can imagine, that I need to have the Callback procedure as 
> procedure Callback(Port, Event, Value : Integer); stdcall;
> but how do I call functions/procedures of MyObject in a threadsafe
> manner from there?

Lazarus has QueueAsyncCall, which is a thread safe, cross platform way
of queueing method calls asynchronously.

E.g. for USB hotplug notification, I register this function with my
device library:

	procedure NotifyPlug(status: cint); cdecl;
	  Application.QueueAsyncCall(@MainForm.NotifyAsync, status);


More information about the fpc-pascal mailing list