我试图从 Python 调用现有的 C 代码。C 代码定义了一个B
包含A
s 的结构数组的结构。C 代码还定义了一个函数,该函数在调用时将值放入结构中。我可以访问数组成员变量,但它不是列表(或支持索引的东西)。相反,我得到一个对象,它是B*
.
我发现了这个问题,但它看起来并没有完全解决。我也不确定如何创建 Python 类的实例B
来替换PyString_FromString()
.
下面是演示我的问题以及如何执行它所需的代码:
例子.h
typedef struct A_s
{
unsigned int thing;
unsigned int other;
} A_t;
typedef struct B_s
{
unsigned int size;
A_t items[16];
} B_t;
unsigned int foo(B_t* b);
例子.c
#include "example.h"
unsigned int
foo(B_t* b)
{
b->size = 1;
b->items[0].thing = 1;
b->items[0].other = 2;
}
例子.i
%module example
%{
#define SWIG_FILE_WITH_INIT
#include "example.h"
%}
%include "example.h"
安装程序.py
from distutils.core import setup, Extension
module1 = Extension('example', sources=['example.c', 'example.i'])
setup(name='Example', version='0.1', ext_modules=[module1])
script.py - 这使用库并演示失败。
import example
b = example.B_t()
example.foo(b)
print b.size
print b.items
for i in xrange(b.size):
print b.items[i]
如何运行一切:
python setup.py build_ext --inplace
mv example.so _example.so
python script.py