我习惯于包装函数,但我正在尝试包装函数 cvStartWriteSeq ,它似乎使用宏 - CV_WRITE_SEQ_ELEM - 将元素写入 opencv 序列...
这是我发现的代码:
CvSeqWriter writer;
cvStartWriteSeq( CV_32SC2, sizeof(CvSeq), sizeof(CvPoint), storage, &writer );
for( i = 0; i < 100; i++ )
{
CvPoint pt; pt.x = rand()%320; pt.y = rand()%240;
CV_WRITE_SEQ_ELEM( pt, writer );
}
CvSeq* seq = cvEndWriteSeq( &writer );
我熟悉使用 defcfun 来包装函数,但在/modules/core/include/opencv2/core/types_c.h 中我看到了该宏,我很好奇如何完成该任务。这是宏定义...
#define CV_WRITE_SEQ_ELEM( elem, writer ) \
{ \
assert( (writer).seq->elem_size == sizeof(elem)); \
if( (writer).ptr >= (writer).block_max ) \
{ \
cvCreateSeqBlock( &writer); \
} \
assert( (writer).ptr <= (writer).block_max - sizeof(elem));\
memcpy((writer).ptr, &(elem), sizeof(elem)); \
(writer).ptr += sizeof(elem); \
}
任何关于我如何做到这一点的指导都会加快获得完整的 Lisp opencv 包装器的过程,我们将不胜感激 =)
最佳答案
CFFI 有一个 ASDF 扩展,我正是为这种情况编写的:包装 C 宏。 例子: https://github.com/sionescu/iolib/blob/ee8d3e538b6a4f0433b6e53e2d0bd767ba879149/iolib.syscalls.asd https://github.com/sionescu/iolib/blob/ee8d3e538b6a4f0433b6e53e2d0bd767ba879149/syscalls/ffi-wrappers-unix.lisp
关于c - 我该如何用 cffi/lisp 包装 opencv 宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18807500/