Hello,
I'm trying to make racket bindings for libgphoto2. Its API uses CameraText
struct for outputting strings, which just wraps char array.
My first attempt was:
(define _Camera-ptr (_cpointer 'Camera))
(define _CameraText-ptr (_cpointer 'CameraText))
(define-gphoto gp_camera_get_about
(_fun _Camera-ptr (v : _CameraText-ptr) _GPContext-ptr
-> _int))
But this was giving me segfaults (not to mention the pointer here is opaque
and there are no getter functions in API).
Later on I've stumbled across
https://github.com/dyoo/ffi-tutorial/blob/master/ffi/tutorial/examples/struct-with-array/struct-with-array.rkt
so I've tried this:
(define _Camera-ptr (_cpointer 'Camera))
(define camera-text-size (* 32 1024))
(define-cstruct _CameraText ([text (_bytes/len (camera-text-size))]))
(define-gphoto gp_camera_get_about
(_fun _Camera-ptr (v : _CameraText-pointer) _GPContext-ptr
-> _int))
(Where bytes/len is helper taken from that example)
How can I initialize this struct to mimic C CameraText txt;? Is there some
better way to handle char arrays (and converting them to strings) than
_byte array? Or should I go with something like (but this was segfaulting
as well):
(define-cstruct _CameraText ([text _string]))
____________________
Racket Users list:
http://lists.racket-lang.org/users