用于包裹char数组的struct的Racket FFI

时间:2014-11-13 13:53:35

标签: racket ffi

我正在尝试为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]))

0 个答案:

没有答案