联合中swig / python结构数组

时间:2015-08-26 19:20:28

标签: python arrays swig

我是swig / python世界的初学者,并试图在python中访问一个C-structure数组,但是我收到以下错误:

  

TypeError:'bar'对象不支持索引

以下是我要做的简化版本:

foo.h中:

#include <inttypes.h>
typedef struct bar {
   uint8_t val;
}bar;

typedef struct foo {
   union {
      bar b[2];
   } u;
}foo;

int fill_foo(foo *);

foo.c的:

#include "foo.h"

int
fill_foo(foo *var)
{
   var->u.b[0].val = 10;
   var->u.b[1].val = 20;
   return 0;
}

foo_test.i:

%module foo_test
%{
#include "foo.h"
%}

%include "foo.h"

foo.py:

import foo_test
f = foo_test.foo()
foo_test.fill_foo(f)
print f.u.b[0]

我已经阅读了一些关于c-arrays和swig的帖子,但我不清楚如何才能解决这个特殊情况。如果有人可以帮助我,我会很高兴。

1 个答案:

答案 0 :(得分:0)

经过一番探讨,我发现我需要扩展struct bar来解决问题。我能够使用以下添加到foo_test.i的上面的示例代码。

%extend bar {
   const bar __getitem__(int i) {
      return $self[i];
   }
}

但缺点是我需要为每个用作数组的结构添加这样的扩展。仍然没有弄清楚如何为所有结构阵列一般地解决这个问题。