2013-02-20 2 views
2

Вот функция в C:Передайте указатель для получения результата через CFFI

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

Теперь я хочу назвать его в Common Lisp через CFFI, как я могу это сделать?

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

 Смежные вопросы

  • Нет связанных вопросов^_^