SWIG返回字节,而不是带有typemap的字符串

2024-09-20 05:48:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我的C库中有两个函数:

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

我使用以下post成功实现了第一个函数的包装器:

%typemap(in) (char *data, int size) {
  Py_ssize_t len;
  PyBytes_AsStringAndSize($input, &$1, &len);
  $2 = (int)len;
}

但是不知道如何用typemaps实现第二个包装器。无法使用SWIG_PYTHON_STRICT_BYTE_CHAR,因为我需要混合使用strbytes


Tags: 函数inpydatasizelenpostint
1条回答
网友
1楼 · 发布于 2024-09-20 05:48:27

你就快到了

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

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

相关问题 更多 >