[plt-scheme] FFI: problem with define-cpointer-type
Hi,
I'm having problems using a type defined by define-cpointer-type as an
argument to a foreign function. Whenever I call out I get:
Scheme->C: expects argument of type <pointer>; given #<my-type>
Basically the code involved looks like:
;;; there is actually more in this struct...
(define-struct my-type (ptr))
(define-cpointer-type _my-type-ptr #f
(lambda (v)
(if (my-type? v)
(my-type-ptr v)
(error "cannot coerce to _my-type-ptr")))
(lambda (ptr)
(if ptr
(make-my-type ptr)
(error "got null"))))
(define my-type-maker
(get-ffi-obj "my_type_maker" lib
(_fun -> (ret : _my-type-ptr/null)
-> (if ret ret (error "got null")))))
(define my-type-operation
(get-ffi-obj "my_type_operation" lib
(_fun _my-type-ptr -> _int)))
(define a (my-type-maker)) ; a is a proper my-type struct
(my-type-operation a) ; throws above error
I can't seem to find any examples in Planet or core collects that use
define-cpointer-type in this way. The closest thing I found was in the
examples magick.ss in defining the _PixelIterator type, and it uses a
ctype and not a cpointer.
Am I just doing this the totally incorrect way?
Thanks,
Sam