Common Lisp CFFI:为数组索引分配struct值

时间:2015-12-23 19:53:36

标签: common-lisp cffi

如何将外部数组的索引值指定为外部结构的值。例如,以下内容:

 (cffi:with-foreign-objects ((x '(:struct my-struct)) 
                             (arr '(:struct my-struct) 2))
       (setf (cffi:mem-aref arr '(:struct my-struct) 0)
             (cffi:mem-ref x '(:struct my-struct))))

我希望与

大致相同
struct my_struct *x;
struct my_struct arr[2];

// x is initialized somewhere

arr[0] = *x;

相反,它想要调用泛型函数cffi:translate-into-foreign-memory。是否有任何方式SETF外来内存到外来内存,通过这个?

1 个答案:

答案 0 :(得分:1)

在irc.freenode.net #lisp上的其他几个人的帮助下,我们发现了:使用memcpy

(cffi:with-foreign-objects ((x '(:struct my-struct)) 
                             (arr '(:struct my-struct) 2))
       (cffi:foreign-funcall "memcpy"
                             :pointer (cffi:mem-aptr arr '(:struct my-struct) 0)
                             :pointer x
                             :int (cffi:foreign-type-size '(:struct my-struct))
                             :void))