lisp - 通过 CFFI 传递获取结果的指针

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

最佳答案

到目前为止一切正常,包括您对 返回值。这就是您调用该函数的方式:

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

关于lisp - 通过 CFFI 传递获取结果的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14979656/

相关文章:

list - LISP:从另一个列表中已存在的元素中删除元素

optimization - Common Lisp、asdf、测试、编译不同优化级别的系统

lisp - 如何获取提供给 lisp 函数的参数数量

c - 使用 CFFI 从 Common Lisp 向堆栈上的 C 函数传递和返回结构

windows - CFFI 没有加载依赖库?

common-lisp - 如何在defsystem中设置C编译器?

lisp - Common Lisp - 打印在一行/返回/单行计数器/格式化

list - 方案满屋戳功能

macros - 什么是方案宏?

lambda - 为什么我的 lisp 代码给我...应该是一个 lambda 表达式?