On Sat, 13 Oct 2007 11:35:40 +0200 "Felip AlĂ ez Nadal" uu.nix.uu@gmail.com wrote:
Hello:
I have a problem with cffi and I don't know if I'm doing something wrong or if It's a bug.
...
plus a functional interface to create Rect objects:
Rect app_new_rect(int x , int y , int w , int h ) ;
Hi, it looks like this functions returns Rects by value. If section 13 of the CFFI manual is still up-to-date passing structs by value is not supported by CFFI.
When I had that problem, I tried to write a Lisp-only function to create Rect objects , to not use app_new_rect at all. I wrote the next function:
(defun rect ( x y width height )
(cffi:with-foreign-object ( ptr 'rect ) (setf (cffi:foreign-slot-value ptr 'rect 'x ) x ) (setf (cffi:foreign-slot-value ptr 'rect 'y ) y ) (setf (cffi:foreign-slot-value ptr 'rect 'width ) width ) (setf (cffi:foreign-slot-value ptr 'rect 'height ) height ) ptr )
)
The ptr you create in with-foreign-object is only valid in the scope of with-foreign-object, so you shouldn't return it outside like that.
Sincerely, Mikael Lax