2013-02-20 92 views
2

得到的结果下面是C中的函数:传递一个指针,通过CFFI

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.. 

回答

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))