我正在尝试使用SWIG在Python中使用C库。这个C库通过各处的参数传递函数结果。使用在线SWIG手册,我成功地获得了传递给Python的整数函数结果,但是我很难弄清楚如何为字符串执行此操作。
这是我的代码的本质:
myfunc.c :
#include <myfunc.h>
#include <stdio.h>
int mystr(int inp, char *outstr){
outstr="aaa";
printf("%s\n", outstr);
return(0);
}
myfunc.h :
extern int mystr(int inp, char *outstr);
所以基本上我的问题是* outstr的typemap应该是什么样的。
提前致谢。
答案 0 :(得分:1)
查看SWIG手册9.3.4 String handling: cstring.i。这提供了几个用于char *
参数的类型映射。
可能(假设你确实使用上面评论中提到的strcpy(outstr, "aaa")
)你想要在SWIG接口文件中,在函数声明之前,例如:
%include <cstring.i>
%cstring_bounded_output(char* outstr, 1024);
答案 1 :(得分:0)
这就是我通过修改SWIG 2.0 manual的第34.9.3节中的示例来实现它的方法:
%typemap(in, numinputs=0) char *outstr (char temp) {
$1 = &temp;
}
%typemap(argout) char *outstr {
PyObject *o, *o2, *o3;
o = PyString_FromString($1);
if ((!$result) || ($result == Py_None)) {
$result = o;
} else {
if (!PyTuple_Check($result)) {
PyObject *o2 = $result;
$result = PyTuple_New(1);
PyTuple_SetItem($result,0,o2);
}
o3 = PyTuple_New(1);
PyTuple_SetItem(o3,0,o);
o2 = $result;
$result = PySequence_Concat(o2,o3);
Py_DECREF(o2);
Py_DECREF(o3);
}
}