gpt4 book ai didi

常见的 lisp、CFFI 和实例化 c 结构

转载 作者:太空宇宙 更新时间:2023-11-03 18:43:20 26 4
gpt4 key购买 nike

我在谷歌上搜索了大约,哦,3 个小时来寻找这个“问题”的解决方案。我试图弄清楚如何使用 CFFI 在 lisp 中实例化 C 结构。我在 c 中有一个结构:

struct cpVect{cpFloat x,y;}

简单吧?我已自动生成此结构的 CFFI 绑定(bind)(我认为是 swig):

(cffi:defcstruct #.(chipmunk-lispify "cpVect" 'classname)
(#.(chipmunk-lispify "x" 'slotname) :double)
(#.(chipmunk-lispify "y" 'slotname) :double))

这会生成一个带有插槽 :X 和 :Y 的结构“VECT”,外国插槽名称证实了这一点(请注意,我既没有生成绑定(bind)也没有编写 C 库(花栗鼠物理学),但实际功能正在从 lisp 调用就好了)。

我进行了广泛的搜索,也许我已经看过 100 次并忽略了它,但我无法弄清楚如何在 lisp 中创建 cpVect 的实例以用于其他函数。

注意函数:

cpShape *cpPolyShapeNew(cpBody *body, int numVerts, cpVect *verts, cpVect offset)

不仅接受 cpVect,还接受指向一组 cpVect 的指针,这引出了我的第二个问题:如何创建指向一组结构的指针?

我去过http://common-lisp.net/project/cffi/manual/html_node/defcstruct.html并尝试了代码,但得到“错误:未绑定(bind)变量:PTR”(我在 Clozure CL 中),更不用说它看起来只返回一个指针,而不是一个实例。

我是 lisp 的新手,到目前为止一直很强大,但这是我遇到的第一个我无法弄清楚的真正问题。谢谢!

最佳答案

大多数 Common Lisp 实现不允许在堆栈上传递结构。有一个 fsbv library它使用 libffi 添加该功能。如果您知道结构布局,您可以将其手动分解为一系列基本参数,但这显然很脆弱。

关于常见的 lisp、CFFI 和实例化 c 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4568861/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com