私は、Python に取り込みたいグローバル変数配列を c に持っています。そして、私はvarout
typemap に問題があります:
/* example.c */
int foo[] = {0, 1};
そして、ここに非常にバニラのインターフェースがあります:
/* example.i */
%module example
%{
extern int foo[2];
%}
%typemap(varout) int foo[] {
int i;
//$1, $1_dim0, $1_dim1
$result = PyList_New($1_dim0);
for (i = 0; i < $1_dim0; i++) {
PyObject *o = PyInt_FromLong((double) $1[i]);
PyList_SetItem($result,i,o);
}
}
%include "example.c"
次の SConstruct でビルドしようとすると:
import distutils.sysconfig
env = Environment(SWIGFLAGS='-python -shadow -Wall'.split(),
CPPPATH=[distutils.sysconfig.get_python_inc()],
SHLIBPREFIX="")
env.SharedLibrary('_example.so', ['example.c', 'example.i'])
$1_dim0
特別な変数が設定されていないため、次のようなコンパイル不能なコードがexample_wrap.c
.
SWIGINTERN PyObject *Swig_var_foo_get(void) {
PyObject *pyobj = 0;
{
int i;
//foo, , foo_dim1
pyobj = PyList_New();
for (i = 0; i < ; i++) {
PyObject *o = PyInt_FromLong((double) foo[i]);
PyList_SetItem(pyobj,i,o);
}
}
return pyobj;
}
したがって、明らかに typemap の一致は発生していますが、配列の次元が欠落しています。私は何が欠けていますか?ディメンションのハードコーディングは機能します。
一般に、cvar
swig でグローバル変数を拡張する方法はありますか?
$ swig -version
SWIG Version 2.0.4
Compiled with g++ [i686-pc-linux-gnu]
Configured options: +pcre
Please see http://www.swig.org for reporting bugs and further information