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

typemaps.iTypemap は実際には SWIG がすべての型を処理する方法ですが、特に必要がない場合は、次のようにします。

%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です。以下は、事前定義されたtypemap を%apply適用し、将来のすべてのパラメーターが出力パラメーターであることを宣言します。Python は呼び出しにパラメーターを必要とせず、代わりに出力としてパラメーターを返します。通常の戻り値とすべての出力パラメーターは、必要に応じてタプルを使用して返されます。OUTPUTint *

%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 に答える