[Haskell-cafe] howto c2hs marshall in out argument by reference

Marc Weber marco-oweber at gmx.de
Tue Dec 19 16:31:26 EST 2006


The function takes a pointer to an integer, prints its value and returns the increment.
	void cl_inc(int *i){
	    printf("changing int from %d to %d", *i, (++i));
	}


I've managed it by using this code:

	{#fun pure cl_inc
			{alloca `CInt' peek*} 
			-> `()'#}
	-}
and calling it this way:
	alloca $ \mem -> do poke mem 3; print_int_ptr_value mem

then its a matter of reading mem by using peak again.

Is there a better way letting {#func  do the marshalling to be able to do directly?
	print $ cl_inc 3
	4
Marc


More information about the Haskell-Cafe mailing list