I have no problems to interface such a function in C with the next prototype: int foo(int a, int b); Problemas arise when dealing with variable-arguments prototypes like : int foo( int a, ...); How to solve it ? is Template GreenCard designed to deal with this kind of functions ? Where to download an example ?
On Wed, 17 Nov 2004, Rafael Martinez Torres wrote:
I have no problems to interface such a function in C with the next prototype:
int foo(int a, int b);
Problemas arise when dealing with variable-arguments prototypes like :
int foo( int a, ...);
How to solve it ?
This what I have found : it may be usefull for ffi readers: This is not very precise, but usually you may find sligth variations on a variadic function such as: int foo(int a, char b,int count,...); int fooA(int a, char b, (void *) args); int fooV(int a, char b, va_list args); Each one implements an specific calling convention we should follow. For Haskell wrappers, should not be difficult tryin to wrap the second: foo :: CInt -> CChar -> [Arg] -> IO(CInt) foo i c args = do ptr <- allocArgs args -- Following the particular calling convention b <- fooA i c ptr --Note the fooA return b fooA :: CInt -> CChar -> Ptr a -> IO(CInt)
participants (1)
-
Rafael Martinez Torres