On Thu, 2009-10-01 at 13:00 -0400, John Van Enk wrote:
> Hi Duncan,
> 
> Yes, I forgot to leave out that I'd like to see 'size_t' mapped to
> CSize.
> 
> As a (dirty) workaround, one can use 'castPtr' as the marshaler when
> dealing with pointers to 'size_t'. I'm a little more concerned about
> FunPtr's (though 'castPtr' still makes the issue go away).
> 
> Here's my specific case dealing with function pointers:

Ohhh, if you're dealing with pointers to CSize then it's easy, c2hs
supports that directly. See the c2hs user guide section on the pointer
hook.

{# pointer *size_t as CSizePtr -> CSize #}

This tells c2hs that when it sees a *size_t type in a function argument
or result that it should be imported as Ptr CSize.

It generates a type alias and uses that when it imports functions eg:

{# pointer *size_t as CSizePtr -> CSize #}

foo :: Ptr CSize -> IO ()
foo = {# call foo as raw_foo #}

generates:

type CSizePtr = Ptr (CSize)

foo :: Ptr CSize -> IO ()
foo = raw_foo

foreign import ccall safe "foo.chs.h foo"
  raw_foo :: CSizePtr -> IO ()


Duncan

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

Reply via email to