Передать указатель для получения результата через 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))