c/c++语言开发共享常见的lisp,CFFI和实例化c结构

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

struct cpVect{cpFloat x,y;} 

简单吧? 我有自动生成的CFFI绑定(swig,我认为)到这个结构:

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

这会生成一个带有插槽的结构“VECT”:X和:Y,外部插槽名称确认(请注意我既没有生成绑定也没有编写C库(chipmunk physics),但实际的函数是从lisp调用的正好)。

我已经搜索了很多,也许我已经看过它100次并且掩盖了它,但我无法弄清楚如何在lisp中创建一个cpVect实例以用于其他function。

注意function:

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

不仅需要一个cpVect,还需要一个指向一组cpVects的指针,这让我想到了第二个问题:如何创建指向一组结构的指针?

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

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

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

    不确定这会有多大帮助,但你可以看一下针对花栗鼠的rubyFFI绑定: https : //github.com/shawn42/chipmunk-ffi/blob/master/lib/chipmunk-ffi/vec2.rb

    Chipmunk有一个数据部分,它具有所有内联方法调用,因此FFI可以使用它们。 其中一个叫做cpv。 cpv是创建cpVect结构的方法。 随意在github w / me(shawn42)上开始讨论这个问题。

      以上就是c/c++开发分享常见的lisp,CFFI和实例化c结构相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/541816.html

      (0)
      上一篇 2021年1月4日
      下一篇 2021年1月4日

      精彩推荐