SWIG return 字节而不是带有类型映射的字符串

SWIG return bytes instead of string with typemap

我的 C 库中有两个函数:

void passBytes(char *data, int size);
void returnBytes(char **data, int *size); //dynamically allocates

我使用这个 :

成功实现了第一个函数的包装器
%typemap(in) (char *data, int size) {
  Py_ssize_t len;
  PyBytes_AsStringAndSize($input, &, &len);
   = (int)len;
}

但无法弄清楚如何使用 实现第二个包装器。不能使用 SWIG_PYTHON_STRICT_BYTE_CHAR 因为我需要混合使用 strbytes.

你快到了

%typemap(in, numinputs=0) (char **data) (char *temp) {
   = &temp;
}
%typemap(argout) (char **data) {
  if (*) {
    $result = PyUnicode_FromString(*);
    free(*);
  }
}

请注意,这两个类型映射结合起来完成了这项工作。如果字符数组以 null 终止,则不需要该长度。参数 temp 已创建,对此的引用将传递给分配数组的 C 函数。