我是 SWIG 的新手,如果我的问题已记录在案,请随时发布链接,我会通读它。
我有一个采用以下形式的 C 函数:
int myFunc(char *output, const char *input)
我生成了 Python 包装器,并尝试使用以下命令调用此函数(在 Python 中):
m=""
n="valid input string"
myFunc(m,n)
这只是打印 (int) 返回码,而 m 仍然是“”。我究竟做错了什么?
谢谢!
如果你的 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 字节。
好的,不建议这样做(请参阅我的评论)和 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