Tag: swig

如何使用SWIG在C ++ API上生成C包装器?

我想使用SWIG在一些C ++ API上生成C包装器。 从SWIG文档SWIG和C ++ : 6.2方法 为了包装C ++,SWIG使用分层方法来生成代码。 在最低级别,SWIG生成一组过程ANSI-C样式包装器。 这些包装器负责基本类型转换,类型检查,error handling以及C ++> binding的其他低级细节。 这些包装器也足以将C ++绑定到支持内置过程的任何目标语言。 从某种意义上说,您可以将这个包装层视为为C ++提供C库接口。 但是,我没有看到任何选择这样做,没有生成在Python,Ruby等语言中使用API​​的代码。我怎样才能获得C包装器?

SWIG将C库连接到Python(从C’序列’结构创建’可迭代’Python数据类型)

我为C库编写了一个Python扩展。 我有一个如下所示的数据结构: typedef struct _mystruct{ double * clientdata; size_t len; } MyStruct; 此数据类型的目的直接映射到Python中的列表数据类型。 因此,我想为导出的结构创建“类似列表”的行为,因此使用我的C扩展编写的代码更像是“Pythonic”。 特别是,这是我想要做的(来自python代码)注意:py_ctsruct是在python中访问的ctsruct数据类型。 我的要求可以归结为: list(py_ctsruct)返回一个python列表,其中包含从c结构中复制的所有内容 py_cstruct [i]返回ith元素(最好在无效索引上抛出IndexError) 对于py_ctsruct中的elem:枚举的能力 根据PEP234 , 如果一个对象实现_ iter _()或_ getitem _() , 则可以使用“for”进行迭代 。 然后使用该逻辑,我认为通过将以下属性(通过重命名 )添加到我的SWIG接口文件,我将具有所需的行为(除了上面的请求#1 – 我仍然不知道如何实现): __len__ __getitem__ __setitem__ 我现在能够在python中索引C对象。 我还没有实现Pythonexception抛出,但是如果超出数组边界,则返回一个幻数(错误代码)。 有趣的是,当我尝试使用’for x in’语法迭代结构时,例如: for i in py_cstruct: print i Python进入一个无限循环,只需在控制台上打印上面提到的魔术(错误)编号。 这告诉我索引有问题。 最后但并非最不重要,我如何实施要求1? 这涉及(据我了解): 从python处理’函数调用列表() 从C代码返回Python(列表)数据类型 [[更新]] […]