【发布时间】:2016-05-17 15:11:55
【问题描述】:
我有一个相当简单的 C 例程,我想使用 SWIG 通过 Python 访问:
int routine(char *instring, char *outstring);
输入字符串刚刚传入,这似乎有效。 outstring 返回的是指向 C 例程中固定数组的指针,我的问题是如何使用 python 接口将 python 参数传递给它。
当我使用 python 时,我得到:
>>retstring = "foo"
>>retval = routine("Hello world", retstring)
这(显然)不起作用,因为当范围返回到提示级别时,值会丢失。但例行公事不会失败。问题是,我传入的任何 OTHER 参数都失败了,因为它不被视为 char *。
除了不返回字符串之外,该例程似乎正在运行。
我不知道该怎么办。我是否必须使用类型映射进行修改才能产生第二次返回?有没有例子可以说明这一点?
【问题讨论】:
-
您需要告诉我们更多关于
routine的信息,才能回答这个问题:您怎么知道分配给outstring的空间有多大?通常,如果oustring为空,则返回值会告诉您将其设为多大,或者大小有固定限制,但它也可能取决于instring中的输入或任何其他可能的方案。 -
@Flexo :我不必分配 outstring。它是在例程中(静态地)预先分配的(是的,从线程的角度来看并不好)。我正在寻找 cstring.i,因为 SWIG 似乎对处理 C 字符串持怀疑态度。或 carrays.i,但 SWIG 表示不要将它们用于字符。
-
那是
char** outstring吗?因为如果它是静态分配的,那么您将无法使用您显示的函数参数返回它。您发布的答案看起来像是固定的 1024 字节,所以仍然不清楚。 -
它是例程中的静态(固定长度)字符串。只返回指向它的指针,包含答案。