<div dir="ltr"><div><div>Hi,<br></div>you have to peek the pointed value. Something like:<br><br>hklFactoryGetAll :: IO [HklFactory]<br>hklFactoryGetAll = alloca $ \ptrn -> do<br>                 factories <- c_hkl_factory_get_all ptrn<br></div>                 n <- peek ptrn<br><div>                 peekArray n factories<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2015-11-08 10:55 GMT+01:00 PICCA Frederic-Emmanuel <span dir="ltr"><<a href="mailto:frederic-emmanuel.picca@synchrotron-soleil.fr" target="_blank">frederic-emmanuel.picca@synchrotron-soleil.fr</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
<br>
Here the signature of one of my C function<br>
<br>
-- hkl.h --<br>
<br>
typedef struct _HklFactory HklFactory;<br>
<br>
HKLAPI HklFactory **hkl_factory_get_all(size_t *n) HKL_ARG_NONNULL(1);<br>
<br>
HKLAPI HklFactory *hkl_factory_get_by_name(const char *name,<br>
                                           GError **error) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT;<br>
<br>
HKLAPI const char *hkl_factory_name_get(const HklFactory *self) HKL_ARG_NONNULL(1);<br>
<br>
HKLAPI HklGeometry *hkl_factory_create_new_geometry(const HklFactory *self) HKL_ARG_NONNULL(1);<br>
<br>
HKLAPI HklEngineList *hkl_factory_create_new_engine_list(const HklFactory *self) HKL_ARG_NONNULL(1);<br>
<br>
<br>
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<br>
This get_all method return an array of (HklFactory *) and get the size of the array via the n parameter.<br>
<br>
So I am trying to use this API from haskell with the foreign system and return a [HklFactory]<br>
<br>
import Foreign (Ptr, peek)<br>
import Foreign.Marshal.Alloc (alloca)<br>
import Foreign.Marshal.Array (peekArray)<br>
<br>
data HklFactory<br>
<br>
foreign import ccall safe "hkl.h hkl_factory_get_all"<br>
        c_hkl_factory_get_all :: Ptr Int -> IO (Ptr HklFactory)<br>
<br>
hklFactoryGetAll :: IO [HklFactory]<br>
hklFactoryGetAll = alloca $ \n -> do<br>
                 factories <- c_hkl_factory_get_all n<br>
                 peekArray n factories<br>
<br>
<br>
but indeed it doesn not work, peekArray complain that n is Ptr Int instead of Int.<br>
<br>
what should I do in order to get my array of HklFactory<br>
<br>
thanks for your help.<br>
<br>
<br>
Frederic<br>
_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners</a><br>
</blockquote></div><br></div>