Я сидел в гугле около трех часов в поисках решения этой «проблемы». Я пытаюсь понять, как создать экземпляр структуры C в lisp, используя CFFI. У меня есть структура в 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 (физика бурундука), но фактические функции вызываются из lisp просто хорошо).
Я искал повсюду, и, может быть, я видел это 100 раз и замалчивал, но я не могу понять, как создать экземпляр cpVect в lisp для использования в других функциях.
Обратите внимание на функцию:
cpShape *cpPolyShapeNew(cpBody *body, int numVerts, cpVect *verts, cpVect offset)
Принимает не только cpVect, но и указатель на набор cpVect, что подводит меня ко второму вопросу: как мне создать указатель на набор структур?
Я посетил http://common-lisp.net/project/cffi/manual/html_node/defcstruct.html и попробовал код, но получил «Ошибка: несвязанная переменная: PTR» (я нахожусь в Clozure CL), не говоря уже о том, что выглядит только для возврата указателя, а не пример.
Я новичок в lisp, до сих пор шел довольно сильно, но это первая реальная проблема, с которой я столкнулся, и которую я не могу понять. Спасибо!