[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