1

我是 SWIG 的新手,如果我的问题已记录在案,请随时发布链接,我会通读它。

我有一个采用以下形式的 C 函数:

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

我生成了 Python 包装器,并尝试使用以下命令调用此函数(在 Python 中):

m=""
n="valid input string"
myFunc(m,n)

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

谢谢!

4

2 回答 2

1

SWIG 手册第 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 字节。

于 2013-05-20T21:01:45.297 回答
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
于 2013-05-20T18:51:10.923 回答