代码之家  ›  专栏  ›  技术社区  ›  Stefano Borini

处理swig/python中char*返回数据的正确方法

  •  3
  • Stefano Borini  · 技术社区  · 13 年前

    我有一个C++例程MyClass::myFunction(char*消息)。其通过在消息缓冲器中写入来返回消息。该例程通过SWIG导出到python。当调用例程时,我假设char*指向与字符串相关联的python分配的内存区域。

    现在 SWIG documentation 说修改这个缓冲区的内容是一个baaad的想法,这是有道理的,因为字符串应该是不可变的。所以现在的问题是:处理这起案件的正确方式是什么?

    1 回复  |  直到 13 年前
        1
  •  1
  •   Adam    13 年前

    听起来你需要 cstring.i 库:

    cstring.i库文件提供了一个宏集合,用于处理 具有变异字符串参数或尝试 通过参数输出字符串数据。

    特别是 %cstring_mutable 宏:

    %include <cstring.i>
    %cstring_mutable(char *ustr);
    ...
    void make_upper(char *ustr);
    

    在Python中:

    >>> make_upper("hello world")
    'HELLO WORLD'
    

    参数名称很重要。在这种情况下,具有 char *ustr 参数将受到影响。因此,要么使参数名称唯一,要么使所有可变字符串参数具有相同的名称。

    注意,还有一个 expansion 在您的情况下可能有用的选项。