我正在尝试为libgphoto2
制作球拍绑定。它的API使用CameraText
结构来输出字符串,它只包含char数组。
我的第一次尝试是:
(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))
但是这给了我segfaults(更不用说这里的指针是不透明的,API中没有getter函数)。
后来我偶然发现了https://github.com/dyoo/ffi-tutorial/blob/master/ffi/tutorial/examples/struct-with-array/struct-with-array.rkt所以我试过了这个:
(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))
(其中bytes/len
是从该示例中获取的帮助者)
如何初始化此结构以模仿C CameraText txt;
?有没有比_byte
数组更好的方法来处理char数组(并将它们转换为字符串)?或者我应该使用类似的东西:
(define-cstruct _CameraText ([text _string]))