无法确定从 SWIG(不是 ctypes)C 传递给 python 例程的正确参数



我有一个相当简单的C例程,我想通过Python访问,使用SWIG:

int routine(char *instring, char *outstring);

输入字符串刚刚传入,这似乎起作用了。outstring返回是指向C例程中固定数组的指针,我的问题是如何使用python接口将python参数传递给它。

当我使用python时,我得到:

>>retstring = "foo"
>>retval = routine("Hello world", retstring)

这(显然)不起作用,因为当作用域返回到提示级别时,值会丢失。但这个程序并没有失败。问题是,我传入的任何OTHER参数都会失败,因为它不被视为char*。

除了不返回字符串之外,该例程似乎正在工作。

我不知道该怎么办。我必须用类型映射进行修改才能产生第二个返回吗?有没有一个例子可以说明这一点?

好吧,我让它像这样工作(.I文件):

%module example
%include cstring.i
%cstring_bounded_output(char *outcs, 1024);  // large magic number...
%{
#include "routine.h"
%}
int routine(char *instring, char *outcs);

调用是(在Python中):

import example
retval, restring = example.routine("Hello World")

最新更新