[Haskell-cafe] getting data through foreign layer without marshalling

Donn Cave donn at avvanta.com
Sun Dec 13 20:31:58 EST 2009


I'm working with a C++ application library, of the sort where
you instantiate a subclass of the library object and it dispatches
your functions on receipt of various events.  With multiple OS
threads, by the way.

This works all right so far, with some C++ boilerplate and Haskell
FunPtrs created via the foreign "wrapper" option, but I am not crazy
about marshalling the application data, to get it to the C++ object
and back to my application functions.

So, I'm wondering if the way I'm trying to thread application data
through the C++ layer is reasonably fool-proof - I mean, empirically
it works in a simple test, but are there going to be storage issues,
etc.?  Is there a better way to do it?

Briefly,
  - my callbacks
	AppData -> CPlusObjectPtr -> P0 ... -> IO Pn
  - the FunPtr inserted into C++ object
	FunPtr (CPlusObjectPtr -> P0 ... -> IO Pn)
	... i.e, I apply the AppData parameter first
  - I rewrite the C++ object's FunPtrs every time I update the
    application data (freeHaskellFunPtr prior values.)

I'm just not sure where AppData lives while it's referenced in a
FunPtr via partial application, if there might be multiple copies, etc.

thanks!
	Donn Cave, donn at avvanta.com



More information about the Haskell-Cafe mailing list