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

时间:2016-05-17 15:11:55

标签: python c pointers swig

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

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

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

当我使用python时,我得到:

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

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

除了不返回字符串之外,例程似乎正在运行。

我不确定该怎么做。我是否必须使用类型地图进行修改才能产生第二次回报?有什么例子可以显示这个吗?

1 个答案:

答案 0 :(得分:0)

好的,我让它像这样工作(.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")