传递指针以通过CFFI获得结果

时间:2013-02-20 12:16:20

标签: lisp common-lisp cffi

这是C中的一个函数:

union Example {
    int number;
    void *pointer;
};
void return_a_value (union Example *ptr) {
    (*ptr).number = 1;
}

现在我想通过CFFI在Common Lisp中调用它,我该怎么做?

(defcunion Example 
  (number :int)
  (ptr :pointer))

(defcfun "return_a_value" :void
  (retval :pointer)) ; I'm not very sure here..

1 个答案:

答案 0 :(得分:2)

到目前为止,一切都没问题,包括你的定义 return_a_value。这就是你可以调用函数的方法:

(with-foreign-object (arg 'example)
  (setf (foreign-slot-value arg 'example 'number) 123)
  (return-a-value arg)
  (foreign-slot-value arg 'example 'number))