从SWIG生成的Python调用C函数,使用char *输出

时间:2013-05-20 18:03:32

标签: python c types swig

我是SWIG的新手,如果我的问题有记录,请随时发布链接,我会仔细阅读。

我有一个C函数,其形式为:

int myFunc(char *output, const char *input)

我生成了Python包装器,我尝试使用:

调用此函数(在Python中)
m=""
n="valid input string"
myFunc(m,n)

这只是打印(int)返回码,而m仍然是“”。我做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

来自SWIG manual section 8.3.4

如果您的C函数声明如下:

int myFunc(char *myOutput, const char *myInput);

然后您可以使用以下SWIG接口语法:

%include "cstring.i"

%cstring_bounded_output(char *myOutput, 1024);

int myFunc(char *myOutput, const char *myInput);

这应该导致Python包装器函数采用单个字符串参数(myInput)并返回整数元组(C函数的返回值)和字符串(myOutput)。字符串的内存将由SWIG分配,长度为1024字节,在本例中。

答案 1 :(得分:0)

好的,不推荐练习(请参阅我的评论)和YMMV,但这似乎对Python 2.4有用:

#pre-allocate enough space for m
m = "\x00"*100
n = "valid input string"
myFunc(m,n)
# now m.rstrip("\x00") has what you want