[Haskell-cafe] help with FFI

José Prous hiena03 at gmail.com
Thu Sep 17 19:10:51 EDT 2009


Lets say I have a library in C with a header like this:

#include <stdio.h>

/*really big structure*/
typedef struct {
int *a;
int *b;
/*lots of stuff
int *z;
} foo;

/*this function allocate memory and fill the structure, reading from a
int create_foo(foo *f,FILE *file,int x,int y);

/*some functions that use the structure*/
int use_foo(foo *f,int w);

/*a funtion that releases the memory*/
int destroy_foo(foo *f);

And I want to use it in haskell using FFI. I can create a .hsc file like

{-# LANGUAGE CPP, ForeignFunctionInterface #-}

import Foreign
import Foreign.C.Types

#include "foo.h"

newtype Foo = Foo ()

foreign import ccall "static foo.h create_foo"
c_create_foo :: Ptr (Foo) -> Ptr (CFile) -> CInt -> CInt -> IO CInt

foreign import ccall "static foo.h use_foo"
c_use_foo :: Ptr (Foo) -> CInt -> IO CInt

foreign import ccall "static foo.h destroy_foo"
c_destroy_foo :: Ptr (Foo) -> IO CInt

It compiles but I have no idea how to call c_create_foo and get back Foo
Any suggestions?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20090917/88a9333a/attachment.html

More information about the Haskell-Cafe mailing list