球拍FFI-包装函数,其具有通过指针返回列表的类型,并通过修改参数指针给出其长度

时间:2019-06-22 07:51:23

标签: racket ffi

我正在尝试包装C函数

Color *ImageExtractPalette(Image image, int maxPaletteSize, int *extractCount);

我已经制作了一个原始包装器,但是现在我还想创建一个增强的包装器,以使其具有

的签名。
(_Image? integer? . -> . (listof _Color?))

其中_Image_Color是用define-cstruct定义的C结构类型。

我已经尝试过此操作(drl是用define-ffi-definer定义的):

(drl ImageExtractPalette* 
     (_fun _Image _int (extract-count : [_ptr o _int]) -> (colors : [_list o _Color extract-count]) -> colors)
     #:c-id ImageExtractPalette)

但是我得到一个错误

_fun: got an expression for a custom type that does not use it
  at: (colors : (_list o _Color extract-count))
  in: (_fun _Image _int (extract-count : (_ptr o _int)) -> (colors : (_list o _Color extract-count)) -> colors)

_list的文档:https://docs.racket-lang.org/foreign/foreign_procedures.html#%28form._%28%28lib._ffi%2Funsafe..rkt%29.__list%29%29

0 个答案:

没有答案