0

我有一个程序,其中的 C 函数有点像下面的代码。当我尝试通过 python 调用这个函数时,它会抛出错误说

'int *' 类型的参数 2。在 swig 中,我看到有办法通过类型映射来处理这个问题,是否还有其他类型映射。因为有一堆函数有很多参数,它们都有 int * 。

#include<stdio.h>

int check(int k, int *i) {
  if( k%2 == 0) 
    *i = 1;
  else 
    *i = 0;
} 
4

1 回答 1

1

类型图确实是 SWIG 处理所有类型的方式,但如果您不typemaps.i特别想要,那么如何:

%module x

%include <cpointer.i>
%pointer_functions(int,int)

%inline %{

void check(int k, int *i) {
  if (k % 2 == 0) 
    *i = 1;
  else 
    *i = 0;
}

%}

cpointer.i允许您创建指向类型的简单指针。这是一个使用示例:

>>> import x
>>> i=x.new_int()
>>> x.check(6,i)
>>> x.int_value(i)
1
>>> x.delete_int(i)

但实际上,它使用起来更简单typemaps.i。下面%apply应用预定义的OUTPUT类型映射,声明所有未来int *参数都是输出参数。Python 不需要调用参数,而是将参数作为输出返回。如有必要,使用元组返回正常返回值和所有输出参数。

%module x

%include <typemaps.i>
%apply int *OUTPUT { int * };

%inline %{

void check(int k, int *i) {
  if (k % 2 == 0) 
    *i = 1;
  else 
    *i = 0;
}

%}

使用示例:

>>> import x
>>> x.check(5)
0
>>> x.check(6)
1
于 2013-10-27T06:04:10.537 回答