C语言 我将如何用cffi/lisp包装opencv宏



我习惯于包装函数,但我正在尝试包装函数cvStartWriteSeq,它似乎使用宏 - CV_WRITE_SEQ_ELEM - 将元素写入opencv序列...

这是我发现的代码 isaw:

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.asdhttps://github.com/sionescu/iolib/blob/ee8d3e538b6a4f0433b6e53e2d0bd767ba879149/syscalls/ffi-wrappers-unix.lisp

最新更新