Передать указатель для получения результата через CFFI

Вот функция в C:

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

1 ответ

Решение

До этого момента все в порядке, включая ваше определение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))
Другие вопросы по тегам