[email protected]
[Top] [All Lists]

Re: [Haskell-cafe] getting data through foreign layer without marshalli

Subject: Re: [Haskell-cafe] getting data through foreign layer without marshalling
From: Bernie Pope
Date: Mon, 14 Dec 2009 18:21:10 +1100
2009/12/14 Donn Cave <[email protected]>:
> 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.

I don't fully understand what you want to do, but perhaps you can use
a StablePtr:

   
http://www.haskell.org/ghc/docs/latest/html/libraries/base/Foreign-StablePtr.html

Cheers,
Bernie.
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

<Prev in Thread] Current Thread [Next in Thread>