[Haskell-beginners] ffi array and peekArray

Sylvain Henry hsyl20 at gmail.com
Sun Nov 8 17:34:52 UTC 2015


Hi,
you have to peek the pointed value. Something like:

hklFactoryGetAll :: IO [HklFactory]
hklFactoryGetAll = alloca $ \ptrn -> do
                 factories <- c_hkl_factory_get_all ptrn
                 n <- peek ptrn
                 peekArray n factories

2015-11-08 10:55 GMT+01:00 PICCA Frederic-Emmanuel <
frederic-emmanuel.picca at synchrotron-soleil.fr>:

> Hello,
>
> Here the signature of one of my C function
>
> -- hkl.h --
>
> typedef struct _HklFactory HklFactory;
>
> HKLAPI HklFactory **hkl_factory_get_all(size_t *n) HKL_ARG_NONNULL(1);
>
> HKLAPI HklFactory *hkl_factory_get_by_name(const char *name,
>                                            GError **error)
> HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT;
>
> HKLAPI const char *hkl_factory_name_get(const HklFactory *self)
> HKL_ARG_NONNULL(1);
>
> HKLAPI HklGeometry *hkl_factory_create_new_geometry(const HklFactory
> *self) HKL_ARG_NONNULL(1);
>
> HKLAPI HklEngineList *hkl_factory_create_new_engine_list(const HklFactory
> *self) HKL_ARG_NONNULL(1);
>
>
> I will focuss for now only the get_all method. As you can see even for the
> C client of my  API HklFactory is an opac struct
> This get_all method return an array of (HklFactory *) and get the size of
> the array via the n parameter.
>
> So I am trying to use this API from haskell with the foreign system and
> return a [HklFactory]
>
> import Foreign (Ptr, peek)
> import Foreign.Marshal.Alloc (alloca)
> import Foreign.Marshal.Array (peekArray)
>
> data HklFactory
>
> foreign import ccall safe "hkl.h hkl_factory_get_all"
>         c_hkl_factory_get_all :: Ptr Int -> IO (Ptr HklFactory)
>
> hklFactoryGetAll :: IO [HklFactory]
> hklFactoryGetAll = alloca $ \n -> do
>                  factories <- c_hkl_factory_get_all n
>                  peekArray n factories
>
>
> but indeed it doesn not work, peekArray complain that n is Ptr Int instead
> of Int.
>
> what should I do in order to get my array of HklFactory
>
> thanks for your help.
>
>
> Frederic
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20151108/44c49570/attachment.html>


More information about the Beginners mailing list